※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1996번 문제인 지뢰 찾기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1996
1996번: 지뢰 찾기
첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 다음 N개의 줄에는 지뢰 찾기 map에 대한 정보가 주어지는데 '.' 또는 숫자로 이루어진 문자열이 들어온다. '.'는 지뢰가 없는 것이고 숫자는 지뢰가 있는 경
www.acmicpc.net
주어진 각 칸에 지뢰가 있을 경우 대응되는 출력 칸에 애스터리스크(*)를, 그렇지 않다면 인접 칸(8방위)에 있는 지뢰 개수를(단, 10 이상인 경우 'M'을) 출력하는 문제이다.
아래 구현의 dr과 dc와 같은 배열을 이용하면 구현을 더욱 편리하게 할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
int N;
string board[1000];
int dr[8] = { 1,1,1,0,-1,-1,-1,0 };
int dc[8] = { -1,0,1,1,1,0,-1,-1 };
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int r = 0; r < N; r++) cin >> board[r];
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (board[r][c] == '.') {
int cnt = 0;
for (int i = 0; i < 8; i++) {
int rr = r + dr[i], cc = c + dc[i];
if (rr < 0 || rr >= N || cc < 0 || cc >= N || board[rr][cc]=='.') continue;
cnt += board[rr][cc] - '0';
}
if (cnt < 10) cout << cnt;
else cout << 'M';
}
else cout << '*';
}
cout << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 1925 // C++] 삼각형 (0) | 2023.08.10 |
---|---|
[BOJ 1972 // C++] 놀라운 문자열 (0) | 2023.08.09 |
[BOJ 28431 // C++] 양말 짝 맞추기 (0) | 2023.08.07 |
[BOJ 28432 // C++] 끝말잇기 (0) | 2023.08.07 |
[BOJ 16165 // C++] 걸그룹 마스터 준석이 (0) | 2023.08.07 |