문제 링크 : https://www.acmicpc.net/problem/14503
맞힌 코드
#include <bits/stdc++.h>
using namespace std;
int n, m;
int r, c, d;
vector<vector<int>> room;
vector<vector<bool>> visited;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
int turnLeft(int d){
return (d+3) % 4;
}
int cleanUp(){
int cnt = 0;
while(true){
if(!visited[r][c]){
visited[r][c] = true;
cnt ++;
}
bool notCleaned = false;
int nx, ny;
for(int i=0; i<4; i++){
d = turnLeft(d);
nx = r + dx[d];
ny = c + dy[d];
if(!visited[nx][ny] && room[nx][ny]==0){
r = nx;
c = ny;
notCleaned = true;
break;
}
}
int back;
int bx, by;
if(!notCleaned){
// 뒤로 가는 방향 계산
back = (d + 2) % 4;
bx = r + dx[back];
by = c + dy[back];
if(room[bx][by]==1){
break;
}
else{
r = bx;
c = by;
}
}
}
return cnt;
}
int main(){
cin >> n >> m;
cin >> r >> c >> d;
room.resize(n, vector<int>(m));
visited.resize(n, vector<bool>(m, false));
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> room[i][j];
}
}
cout << cleanUp();
}
메모
for문 조건 작성할 때 ; 써야 되는데 l 적어버리는 거 조심.
main이 아닌 다른 함수에서 visited 같은 2차원 배열을 사용하려면 전역 변수로 선언하고, main 함수 내에서 resize로 초기화하는 코드 작성 필요.
'Algorithm' 카테고리의 다른 글
[프로그래머스] 42586번 기능개발 C++ (0) | 2025.02.09 |
---|---|
[백준/BOJ] 16967번 배열 복원하기 C++ (0) | 2025.02.05 |
[백준/BOJ] 14888번 연산자 끼워넣기 C++ (0) | 2025.01.26 |
[백준/BOJ] 25757번 임스와 함께하는 미니게임 C++ (0) | 2025.01.23 |
[백준/BOJ] 2164번 카드2 C++ (0) | 2024.11.20 |