※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts