원석 구역 세기
문제
채석장의 절단면을 N행 N열의 격자로 찍은 사진이 있다. 사진의 각 칸에는 그 자리에서 나온 광물이 한 글자로 적혀 있다. 루비는 "R", 가넷은 "G", 베릴은 "B"로 적는다. 모든 칸에는 세 글자 중 하나가 반드시 적혀 있으며, 아무 광물도 없는 칸은 없다.
같은 광물이 상하좌우로 맞닿아 이어진 칸들을 하나의 구역으로 본다. 대각선으로만 맞닿은 칸은 이어진 것으로 보지 않는다. 채석장에서는 이 구역의 개수를 세어 절단면을 몇 조각으로 떼어 낼지 정하므로, 구역의 개수를 정확히 아는 것이 중요하다.
숙련된 감별사는 세 광물을 모두 구분하므로 사진에 적힌 글자 그대로 구역을 센다. 반면 현장에 놓인 휴대용 감별기는 루비와 가넷의 색을 가려내지 못해 두 광물을 하나의 같은 광물로 읽는다. 즉 감별기가 보는 사진은 "R"이 전부 "G"로 바뀐 사진과 같다. 베릴은 두 기준에서 모두 그대로 읽힌다.
사진이 주어졌을 때, 감별사가 세는 구역의 수와 감별기가 세는 구역의 수를 차례대로 계산하는 프로그램을 작성하여라.
예를 들어 N=3인 사진이 다음의 표와 같다고 해보자. 각 위치는 (행, 열)로 나타내며, 행과 열의 번호는 1부터 시작한다.
| G | B | G |
|---|---|---|
| G | G | R |
| R | R | B |
감별사가 보는 구역은 여섯 개다. 각 구역을 적으면 다음의 표와 같다.
| 구역 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 광물 | 가넷 | 가넷 | 베릴 | 베릴 | 루비 | 루비 |
| 칸 | (1, 1), (2, 1), (2, 2) | (1, 3) | (1, 2) | (3, 3) | (2, 3) | (3, 1), (3, 2) |
(1, 1)에 있는 가넷과 (1, 3)에 있는 가넷은 같은 광물이지만 사이에 베릴이 끼어 있어서 이어지지 않으므로 서로 다른 구역이다.
반면 감별기가 보는 사진은 다음과 같다. 루비가 적혀 있던 세 칸이 모두 가넷으로 읽힌다.
| G | B | G |
|---|---|---|
| G | G | G |
| G | G | B |
이 사진에서는 가넷으로 읽히는 일곱 칸이 모두 하나로 이어져 구역이 하나가 된다. 베릴 구역은 (1, 2)와 (3, 3)으로 그대로 두 개다. 따라서 감별기가 세는 구역은 세 개다.
결과적으로 이 예시에서의 정답은 6과 3이다.
입출력 예시
예시 1
입력
3 GBG GGR RRB
출력
6 3
예시 2
입력
2 RB RR
출력
2 2
예시 3
입력
5 RRRBB GGBBB BBBRR BBRRR RRRRR
출력
4 3
입력 조건
가장 먼저 사진의 한 변의 크기 N이 자연수로 주어진다. N은 1 이상 70 이하의 자연수다.
이어서 N개의 줄에 걸쳐 사진의 각 행이 위에서 아래로 차례대로 주어진다. 각 줄은 띄어쓰기 없이 N개의 글자가 붙어 있는 형태이며, 각 글자는 "R", "G", "B" 중 하나다. "R"은 루비, "G"는 가넷, "B"는 베릴을 의미한다. 세 광물이 모두 나타나지 않는 사진이 주어질 수도 있다.
출력 조건
감별사가 세는 구역의 수와 감별기가 세는 구역의 수를 한 줄에 차례대로 출력한다. 두 수 사이는 공백 하나로 띄운다. 공백은 두 수 사이에만 들어가므로 줄의 마지막 수 뒤에는 공백이 남지 않는다.
요구사항
- 같은 광물이 상하좌우로 맞닿아 이어진 칸들을 하나의 구역으로 셉니다
- 대각선으로만 맞닿은 칸은 이어진 것으로 보지 않습니다
- 감별기는 루비를 가넷과 같은 광물로 읽으므로, "R"을 전부 "G"로 바꾼 사진에서 구역을 셉니다
- 두 수를 한 줄에 공백 하나로 띄워서 차례대로 출력합니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 16개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 16개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 16개를 전부 통과해야 해결입니다.
2 RB RR
2 2
3 GBG GGR RRB
6 3
5 RRRBB GGBBB BBBRR BBRRR RRRRR
4 3
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.