로그인가입

원석 구역 세기

200점케이스 16출제 dongbinna
10월 30일에 올라온 문제입니다.

문제

채석장의 절단면을 N행 N열의 격자로 찍은 사진이 있다. 사진의 각 칸에는 그 자리에서 나온 광물이 한 글자로 적혀 있다. 루비는 "R", 가넷은 "G", 베릴은 "B"로 적는다. 모든 칸에는 세 글자 중 하나가 반드시 적혀 있으며, 아무 광물도 없는 칸은 없다.

같은 광물이 상하좌우로 맞닿아 이어진 칸들을 하나의 구역으로 본다. 대각선으로만 맞닿은 칸은 이어진 것으로 보지 않는다. 채석장에서는 이 구역의 개수를 세어 절단면을 몇 조각으로 떼어 낼지 정하므로, 구역의 개수를 정확히 아는 것이 중요하다.

숙련된 감별사는 세 광물을 모두 구분하므로 사진에 적힌 글자 그대로 구역을 센다. 반면 현장에 놓인 휴대용 감별기는 루비와 가넷의 색을 가려내지 못해 두 광물을 하나의 같은 광물로 읽는다. 즉 감별기가 보는 사진은 "R"이 전부 "G"로 바뀐 사진과 같다. 베릴은 두 기준에서 모두 그대로 읽힌다.

사진이 주어졌을 때, 감별사가 세는 구역의 수와 감별기가 세는 구역의 수를 차례대로 계산하는 프로그램을 작성하여라.

예를 들어 N=3인 사진이 다음의 표와 같다고 해보자. 각 위치는 (행, 열)로 나타내며, 행과 열의 번호는 1부터 시작한다.

GBG
GGR
RRB

감별사가 보는 구역은 여섯 개다. 각 구역을 적으면 다음의 표와 같다.

구역123456
광물가넷가넷베릴베릴루비루비
칸(1, 1), (2, 1), (2, 2)(1, 3)(1, 2)(3, 3)(2, 3)(3, 1), (3, 2)

(1, 1)에 있는 가넷과 (1, 3)에 있는 가넷은 같은 광물이지만 사이에 베릴이 끼어 있어서 이어지지 않으므로 서로 다른 구역이다.

반면 감별기가 보는 사진은 다음과 같다. 루비가 적혀 있던 세 칸이 모두 가넷으로 읽힌다.

GBG
GGG
GGB

이 사진에서는 가넷으로 읽히는 일곱 칸이 모두 하나로 이어져 구역이 하나가 된다. 베릴 구역은 (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

풀이

코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.

0자1줄메모리 256MB (적어만 둡니다)기준 4.0ms

제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.

공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.

이 문제를 푼 사람

아직 없습니다. 첫 번째가 되실 수 있습니다.