반응형
구현 방법
이 문제는 구현 문제였습니다.
문제에 주어진 로직대로 구현하면 되는 문제였습니다.
단 결정적인 아이디어를 떠올린 부분은 다음과 같습니다.
2번의 a번 조건과 b번 조건에서 현재 보고 있는 방향의 왼쪽 칸을 탐색합니다.
문제에 주어진 조건에 의하면 0 = 북쪽(상), 1 = 동쪽(우), 2 = 남쪽(하), 3 = 서쪽(좌) 입니다.
좌측을 구하는 방법은 ( 현재 바라보는 방향 + 3 ) % 4 입니다.
예를 들어 방향이 2이면, 아래를 향하고 있으므로 왼쪽인 오른쪽을 바라보려면 (2+3)%4 의 결괏값은 1로 오른쪽을 보게 됩니다.
문제를 아직 해결하지 못하신 분들은 여기까지 읽어보고 직접 구현해 보시기 바랍니다.
위 로직을 다음과 같이 구현했습니다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
int arr[51][51];
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
int count = 0;
int x, y;
//0 = 북(상), 1 = 동(우), 2 = 남(하), 3 = 서(좌)
int direction;
cin >> x >> y >> direction;
//장소 입력 받기
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
cin >> arr[i][j];
}
}
while(1) {
//1. 현재 위치 청소
if(arr[x][y] == 0) {
arr[x][y] = 2;
count++;
}
//2. 현재 위치에서 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행한다.
//a. 왼쪽 방향에서 아직 청소하지 않은 공간이 존재하면, 그 방향으로 회전한 다음 한칸을 전진하고 1번부터 진행한다.
if(arr[x-dx[(direction+3)%4]][y+dy[(direction+3)%4]] == 0) {
//그 방향으로 회전
direction = (direction+3)%4;
//한칸 전진
x -= dx[direction];
y += dy[direction];
}//b. 네 방향 모두 청소가 이미 되어있거나 벽인 경우에는, 바라보는 방향을 유치한 채로 한 칸 후진하고 2번으로 돌아간다.
else if(arr[x+1][y] &&arr[x][y+1] && arr[x-1][y]) && arr[x][y-1]) {
//후진 할 수 있으면
if(direction%2 == 0 && arr[x + dx[direction]][y] != 1) {
x += dx[direction];
} else if(direction%2 == 1 && arr[x][y - dy[direction]] != 1){
y -= dy[direction];
}
//뒤쪽 방향이 벽이라 우진도 할 수 없는 경우에는 답 출력하고 작동을 멈춘다.
else if(direction%2 == 0 && arr[x + dx[direction]][y] == 1) {
cout << count;
return 0;
} else if(direction%2 == 1 && arr[x][y - dy[direction]] == 1) {
cout << count;
return 0;
}
}//b. 왼쪽 방향에 청소할 공간이 없다면, 그 방향으로 회전하고 2번으로 돌아간다.
else if (arr[x-dx[(direction+3)%4]][y+dy[(direction+3)%4]] != 0){
direction = (direction+3)%4;
}
}
}
반응형
'코딩테스트 > 백준 (BOJ)' 카테고리의 다른 글
[BOJ 2798] 블랙잭 (C++) (0) | 2021.04.29 |
---|---|
[BOJ 2437] 저울 (C++) (0) | 2021.04.21 |
[BOJ 3190] 뱀 (C++) (0) | 2021.04.12 |
[BOJ 6198] 옥상 정원 꾸미기 (C++) (0) | 2021.04.09 |
[BOJ 4179] 불! (C++) (0) | 2021.02.28 |
댓글