※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2823번 문제인 유턴 싫어이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2823
2823번: 유턴 싫어
상근이는 여자친구와의 드라이브를 위해서 운전을 배우고 있다. 도로 연수를 10년쯤 하다 보니 운전은 그럭저럭 잘하게 되었다. 하지만, 그는 유턴을 하지 못한다. 10년동안 도로 연수를 받았지
www.acmicpc.net
주어진 모든 '.' 칸에 대하여 사방으로 이어진 칸 중 'X'가 셋 이상 있는 칸이 존재하는지를 살펴 문제를 해결하자.
주어지는 지도의 상하좌우로 'X'로 이루어진 행과 열을 하나씩 추가하면 경계 부분에 대한 예외처리를 할 필요가 없어 간편히 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int R, C;
string board[12];
int dr[4] = { 1,-1,0,0 };
int dc[4] = { 0,0,1,-1 };
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> R >> C;
for (int c = -1; c < C; c++) board[0] += "X";
for (int r = 1; r <= R; r++) {
cin >> board[r];
board[r] = "X" + board[r] + "X";
}
for (int c = -1; c < C; c++) board[R + 1] += "X";
for (int r = 1; r <= R; r++) {
for (int c = 1; c <= C; c++) {
if (board[r][c] == 'X') continue;
int cnt = 0;
for (int i = 0; i < 4; i++) {
int rr = r + dr[i], cc = c + dc[i];
if (board[rr][cc] == 'X') cnt++;
}
if (cnt > 2) {
cout << 1;
return 0;
}
}
}
cout << 0;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2840 // C++] 행운의 바퀴 (0) | 2024.01.20 |
---|---|
[BOJ 2865 // C++] 나는 위대한 슈퍼스타K (1) | 2024.01.19 |
[BOJ 2994 // C++] 내한 공연 (0) | 2024.01.17 |
[BOJ 2993 // C++] 세 부분 (0) | 2024.01.16 |
[BOJ 2992 // C++] 크면서 작은 수 (1) | 2024.01.15 |