-
[BOJ / C++] 11123번 : 양 한마리... 양 두마리...Study (etc)/Problem Solving 2023. 5. 3. 23:40
문제
얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지. 그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!" 정말 도움이 안되는 친구라고 생각했었지. 그런데 막상 또 다시 잠을 청해보려고 침대에 눕고 보니 양을 세고 있더군... 그런데 양을 세다보니 이걸로 프로그램을 하나 짜볼 수 있겠단 생각이 들더군 후후후... 그렇게 나는 침대에서 일어나 컴퓨터 앞으로 향했지.
양을 # 으로 나타내고 . 으로 풀을 표현하는 거야. 서로 다른 # 두 개 이상이 붙어있다면 한 무리의 양들이 있는거지. 그래... 좋았어..! 이걸로 초원에서 풀을 뜯고 있는 양들을 그리드로 표현해 보는거야!
그렇게 나는 양들을 그리드로 표현하고 나니까 갑자기 졸렵기 시작했어. 하지만 난 너무 궁금했지. 내가 표현한 그 그리드 위에 몇 개의 양무리가 있었는지! 그래서 나는 동이 트기 전까지 이 프로그램을 작성하고 장렬히 전사했지. 다음날 내가 잠에서 깨어났을 때 내 모니터에는 몇 개의 양무리가 있었는지 출력되어 있었지.
입력
첫 번째 줄은 테스트 케이스의 수를 나타나는 T를 입력받는다.
이후 각 테스트 케이스의 첫 번째 줄에서는 H,W 를 입력받는다. H는 그리드의 높이이고, W는 그리드의 너비이다. 이후 그리드의 높이 H 에 걸쳐서 W개의 문자로 이루어진 문자열 하나를 입력받는다.
- 0 < T ≤ 100
- 0 < H, W ≤ 100
출력
각 테스트 케이스마다, 양의 몇 개의 무리로 이루어져 있었는지를 한 줄에 출력하면 된다.
Solved.ac 레벨
실버 II
풀이
#include <bits/stdc++.h> using namespace std; int t,h,w, cnt = 0; char MAP[101][101]; bool visited[101][101]; queue< pair<int, int> > q; int dx[4] = {0, 0, -1, 1}; int dy[4] = {-1, 1, 0, 0}; void BFS(pair<int, int> p){ visited[p.first][p.second] = true; q.push(p); while(!q.empty()) { int curX = q.front().first; int curY = q.front().second; q.pop(); for(int i = 0; i < 4; i++) { int nextX = curX + dx[i]; int nextY = curY + dy[i]; if(nextX >= 0 && nextX < h && nextY >= 0 && nextY < w) { if(!visited[nextX][nextY] && MAP[nextX][nextY] == '#'){ visited[nextX][nextY] = true; q.push(make_pair(nextX, nextY)); } } } } } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> t; while(t--) { cnt = 0; h = 0; w = 0; memset(MAP, ' ', sizeof(MAP)); memset(visited, false, sizeof(visited)); cin >> h >> w; for(int i = 0 ; i < h; i++) { for(int j = 0; j < w; j++) { cin >> MAP[i][j]; } } for(int i = 0; i < h; i++) { for(int j = 0; j < w; j++) { if(!visited[i][j] && MAP[i][j] == '#') { BFS(make_pair(i, j)); cnt++; } } } cout << cnt << "\n"; } return 0; }
11123번: 양 한마리... 양 두마리...
얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지. 그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!"
www.acmicpc.net
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 17609번 : 회문 (0) 2023.05.07 [BOJ / C++] 2018번 : 수들의 합 5 (0) 2023.05.04 [BOJ / C++] 17129번 : 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유 (0) 2023.04.27 [BOJ / C++] 2502번 : 떡 먹는 호랑이 (0) 2023.04.20 [BOJ / C++] 15989번 : 1, 2, 3 더하기 4 (0) 2023.04.17