문제 링크
문제
N × N × N 크기의 입체 공간이 있다. 공간 속 좌표는 1 ≤ i, j, k ≤ 을 만족하는 세 정수 ( 로 나타낸다.
공간 속에는 개의 큐브들이 존재하며, 각 큐브는 정확히 하나씩의 좌표를 차지한다. 같은 좌표에는 여러 개의 큐브가 겹쳐 있지 않다. 다음 조건을 만족하는 큐브의 개수를 찾아보자.
- (i ± 1, j, k),(i, j ± 1, k),(i, j, k ± 1) 총 6곳 모두에 큐브가 존재한다. 에 큐브가 존재할 때,
입력
첫 번째 줄에 두 정수 , 이 주어진다.
다음 개의 줄에 걸쳐 각 줄마다 세 정수 , , 가 주어진다. 이는 에 큐브가 존재한다는 의미이다.
출력
문제의 정답을 출력한다.
제한
- 3 ≤ N ≤ 5
- 0 ≤ M ≤ N^3
- 1 ≤ i, j, k ≤ N
- 중복된 좌표는 주어지지 않음
예제 입력 1
3 1
1 1 1
예제 출력 1
0
조건을 만족하는 큐브는 없다.
예제 입력 2
3 7
2 2 2
1 2 2
3 2 2
2 1 2
2 3 2
2 2 1
2 2 3
예제 출력 2
1
(2, 2, 2)에 있는 큐브는 조건을 만족하므로, 조건을 만족하는 큐브는 1개이다.
알고리즘 분류
- 구현
풀이
3차원 배열을 선언하고 좌표에 해당하는 값을 true로 초기화한다.
이후 모든 칸을 탐색하면서 조건을 만족한다면 값을 1 증가시킨다.
탐색이 종료된 후 도출되는 값이 정답이 된다.
칸이 최대 125칸까지 존재하므로 모든 칸을 탐색하는 데 오랜 시간이 걸리지 않는다.
코드
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#define MAX 7
#define FASTIO cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
using namespace std;
int N, M, X, Y, Z;
bool Cube[MAX][MAX][MAX];
int Answer;
void input() {
cin >> N >> M;
for (int i = 0; i < M; i++) {
cin >> X >> Y >> Z;
Cube[X][Y][Z] = true;
}
}
void settings() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
for (int k = 1; k <= N; k++) {
if (Cube[i][j][k]) {
if (Cube[i + 1][j][k] && Cube[i - 1][j][k] && Cube[i][j + 1][k] && Cube[i][j - 1][k] && Cube[i][j][k + 1] && Cube[i][j][k - 1]) {
Answer++;
}
}
}
}
}
}
void find_Answer() {
cout << Answer << "\n";
}
int main() {
FASTIO
input();
settings();
find_Answer();
return 0;
}
'BOJ > Bronze' 카테고리의 다른 글
[BOJ/Bronze 5] 백준 32951 AI 선도대학(C++) (1) | 2025.01.01 |
---|---|
[BOJ/Bronze 1] 백준 11059 크리 문자열(C++) (0) | 2022.03.21 |
[BOJ/Bronze 1] 백준 2167 2차원 배열의 합(C++) (0) | 2022.03.19 |
[BOJ/Bronze 1] 백준 1032 명령 프롬프트(C++) (0) | 2022.03.18 |
[BOJ/Bronze 4] 백준 2480 주사위 세개(Kotlin) (0) | 2022.03.04 |