🔵 문제 링크
https://www.acmicpc.net/problem/14503
🔵 Point
지문을 잘 이해하라... 나는 지문을 이해 못해서 계속 틀렸었다.
지문이 좀 헷갈린다 ;;

지문이 들여쓰기도 없이 이렇게 제시되어 있는데 지문이 뜻하는 내용은 다음과 같다.

지피티는 마지막에 "그렇지 않다면 다시 3번을 반복한다"라는 지문을 추가하였는데, 실제로 이렇게 구현해야 답을 맞힐 수 있다.
별 다른 스킬은 필요 없고 시뮬레이션류 문제가 늘 그렇듯이 위 지문 그대로 구현하면 된다.
🔵 코드
#include <iostream>
using namespace std;
int map[50][50];
int ans;
int n, m;
// 북 동 남 서 (행, 열 기준)
int dx[4] = { -1, 0, 1, 0 };
int dy[4] = { 0, 1, 0, -1 };
int main()
{
cin >> n >> m;
int r, c, d;
cin >> r >> c >> d;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> map[i][j];
while (true)
{
// 1. 현재 칸이 아직 청소되지 않은 경우
if (map[r][c] == 0)
{
map[r][c] = -1; // 청소함을 표시
ans++;
}
bool moved = false;
// 2. 4방향 탐색
for (int i = 0; i < 4; i++)
{
d = (d + 3) % 4; // 반시계 회전
int nx = r + dx[d];
int ny = c + dy[d];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && map[nx][ny] == 0)
{
r = nx;
c = ny;
moved = true;
break; // 전진했으면 다음 루프
}
}
if (!moved)
{
// 3. 후진
int back = (d + 2) % 4;
int nx = r + dx[back];
int ny = c + dy[back];
if (nx < 0 || nx >= n || ny < 0 || ny >= m || map[nx][ny] == 1)
break; // 후진 불가면 종료
r = nx;
c = ny; // 후진 위치로 이동
}
}
cout << ans << endl;
return 0;
}'PS' 카테고리의 다른 글
| [C++] Programmers Lv. 1 "크레인 인형 뽑기 게임" (0) | 2025.05.09 |
|---|---|
| [C++] Programmers Lv. 2 "주식가격" (0) | 2025.05.03 |
| [C++] Boj 10757 큰 수 A+B (0) | 2025.04.29 |
| [C++] Boj 1202 보석 도둑 (0) | 2025.04.29 |
| [C++] Programmers Lv. 2 "짝지어 제거하기" (0) | 2025.04.29 |