[백준 Python] 16722 결! 합! - 구현
https://www.acmicpc.net/problem/16722
16722번: 결! 합!
위 입력에서 '합'을 이루는 모든 그림 조합은 (1,5,6), (2,3,5), (2,4,6), (2,7,9), (6,8,9) 5가지가 있다.
www.acmicpc.net
오늘도 어김없이 구현 문제를 풀어봅니다. 글 작성 시점으로 다음날이 소마 2차 코딩테스트기 때문에 구현 문제에 소홀히 하면 안 됩니다. 이번 문제는 결 또는 합을 외치는 게임으로 저는 더 지니어스에서 장동민이 결 합 게임을 하는 것을 본 적이 있기 때문에 문제는 친숙했습니다.
문제 설명은 구현 문제 특성상 매우 자세하게 설명되어 있어서 천천히 읽는 다면 이해하는데에 어려움은 없겠습니다.
- 도형의 모양으로는 {동그라미, 세모, 네모}, 도형의 색으로는 {노란색, 빨간색, 파란색}, 배경색으로는 {회색, 흰색, 검은색}이 존재한다.
- ‘합’이란 그림의 세 가지 속성이 모두 같거나 모두 다른 세 장의 그림 조합을 의미한다.
우선 처음에 읽으면서 코드를 작성할 때는 플레이어가 말한 번호만 합인지 판별하는 식으로 구현했지만 후에 플레이어가 결을 외칠 경우 어차피 모든 조합을 확인하여 합이 더 이상 존재하지 않는지 알아야 합니다. 따라서 처음부터 0~8번 인덱스 중 3가지를 고른 조합을 미리 구해서 각각 합인지 아닌지 합이라면 배열에 따로 모아둡니다.
합 판별은 각각의 속성이 모두 같거나 모두 다르다면 for문에서 continue 하고 그렇지 않으면 break 해주었습니다.
미리 합 배열을 구해서 플레이어가 외친 합 조합이 배열에 존재하면 remove 하는 식으로 구현했습니다.
마지막에 결을 이미 외쳐서 +3점을 획득한 적이 있다면 후에 외치는 결에은 -1점을 주어야 합니다. 처리하지 않으면 90%쯤 오답.