트랙
/
Haskell
Haskell
/
연습 문제
/
바둑 점수 세기
바둑 점수 세기

바둑 점수 세기

어려움

지침

바둑판에서 획득한 점수를 세어 보세요.

바둑(또는 baduk, igo, cờ vây, wéiqí)에서는 내 돌로 빈 교차점을 완전히 둘러싸면 점수를 얻어요. 플레이어가 이렇게 둘러싼 교차점을 그 플레이어의 영역이라고 해요.

각 플레이어의 영역을 계산하세요. 상대방의 영역 안에 갇힌 돌은 이미 바둑판에서 치워진 것으로 가정해도 돼요.

지정된 좌표가 속한 영역을 알아내세요.

빈 교차점 여러 개가 한꺼번에 둘러싸일 수 있으며, 둘러싸는 데에는 가로와 세로로 이웃한 교차점만 포함돼요. 다음 그림에서 중요한 돌은 "O"로, 중요하지 않은 돌은 "I"(무시됨)로 표시되어 있어요. 빈 칸은 빈 교차점을 나타내요.

+----+
|IOOI|
|O  O|
|O OI|
|IOI |
+----+

더 정확히 말하면, 어떤 빈 교차점은 그 이웃이 모두 그 플레이어의 돌이거나 그 플레이어의 영역에 속한 빈 교차점일 때 그 플레이어의 영역에 속해요.

더 자세한 내용은 Wikipedia나 Sensei's Library를 참고하세요.

힌트

이 연습 문제를 완료하려면 다음 함수들을 구현해야 해요:

  • territories는 각 영토에 속한 점들의 좌표(1부터 시작하고, 왼쪽 위가 (1,1)이에요)와 그 영토를 "소유"한 사람을 반환해요.

  • territoriesFor는 해당 좌표를 포함하는 영토와 그 영토의 소유자를 반환해요. 좌표가 빈 위치를 가리키지 않으면 Nothing을 반환해요.

영토에 인접한 돌이 한 플레이어의 돌뿐이라면, 그 플레이어가 그 영토를 소유해요.

타입 시그니처는 이미 작성되어 있지만, 함수를 정의하는 건 직접 해야 해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Haskell Exercism

바둑 점수 세기 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Haskell 트랙을 연습 문제 107개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.