[Silver IV] 이변마작 1 - 33042
성능 요약
메모리: 109544 KB, 시간: 88 ms
분류
구현, 자료 구조, 집합과 맵, 해시를 사용한 집합과 맵, 트리를 사용한 집합과 맵
제출 일자
2026년 04월 25일 22:04:59
문제 설명
마작의 패牌는 $34$종류의 패가 각각 $4$장씩, 총 $136$장으로 이루어져 있습니다. 패의 종류는 다음과 같습니다.
| 모양 | 이름 |
|---|---|
| 만수패萬數牌 | |
패에 쓰여 있는 한자에 따라 1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m으로 총 $9$개의 종류가 있습니다. | |
| 통수패筒數牌 | |
패에 그려져 있는 바퀴의 개수에 따라 1p, 2p, 3p, 4p, 5p, 6p, 7p, 8p, 9p로 총 $9$개의 종류가 있습니다. | |
| 삭수패索數牌 | |
패에 그려져 있는 대나무의 개수에 따라 1s, 2s, 3s, 4s, 5s, 6s, 7s, 8s, 9s로 총 $9$개의 종류가 있습니다. | |
| 자패字牌 | |
패에 쓰여 있는 글자의 종류에 따라 1z, 2z, 3z, 4z, 5z, 6z, 7z로 총 $7$개의 종류가 있습니다. | |
여러분은 마작패의 모양을 익히기 위해 마작패를 섞어 하나씩 놓아보고 있습니다. 하지만 여러분이 아직 모르고 있는 사실이 하나 있습니다. 바로 마작패들에 이변이 일어나고 있다는 것입니다.
마작에는 같은 종류의 패가 $4$장씩 존재하지만, 이변이 일어난 마작패는 종류가 바뀌기 때문에 경우에 따라서는 같은 종류의 패가 $5$장 이상이 되는 것도 가능합니다.
여러분은 마작패를 늘어놓다가 같은 마작패가 $5$장 이상 나왔을 때 이변을 눈치채고 해결해야 합니다. 이변을 눈치챌 수 있는 시점을 구해 주세요.
입력
첫 번째 줄에 늘어놓을 마작패의 개수 $N$이 주어집니다. $(1 \le N \le 136)$
두 번째 줄에 $N$장의 마작패의 종류가 놓아볼 순서대로 공백으로 구분되어 주어집니다. 입력으로 주어지는 모든 마작패는 위에서 설명한 $34$종 중 하나입니다.
출력
$i$번째 패를 놓은 이후에 이변을 눈치챌 수 있다면 $i$를 출력합니다. 패를 끝까지 늘어놓아도 이변을 눈치채지 못한다면, 대신 0을 출력합니다.
💡 해결 방법
💻 코드
# 마작의 패牌는 $34$종류의 패가 각각 $4$장씩, 총 $136$장으로 이루어져 있습니다. 패의 종류는 다음과 같습니다.
# 모양 이름
# 만수패萬數牌
# 패에 쓰여 있는 한자에 따라 1m, 2m, 3m, 4m, 5m, 6m, 7m, 8m, 9m으로 총 $9$개의 종류가 있습니다.
# 통수패筒數牌
# 패에 그려져 있는 바퀴의 개수에 따라 1p, 2p, 3p, 4p, 5p, 6p, 7p, 8p, 9p로 총 $9$개의 종류가 있습니다.
# 삭수패索數牌
# 패에 그려져 있는 대나무의 개수에 따라 1s, 2s, 3s, 4s, 5s, 6s, 7s, 8s, 9s로 총 $9$개의 종류가 있습니다.
# 자패字牌
# 패에 쓰여 있는 글자의 종류에 따라 1z, 2z, 3z, 4z, 5z, 6z, 7z로 총 $7$개의 종류가 있습니다.
# 여러분은 마작패의 모양을 익히기 위해 마작패를 섞어 하나씩 놓아보고 있습니다. 하지만 여러분이 아직 모르고 있는 사실이 하나 있습니다. 바로 마작패들에 이변이 일어나고 있다는 것입니다.
# 마작에는 같은 종류의 패가 $4$장씩 존재하지만, 이변이 일어난 마작패는 종류가 바뀌기 때문에 경우에 따라서는 같은 종류의 패가 $5$장 이상이 되는 것도 가능합니다.
# 여러분은 마작패를 늘어놓다가 같은 마작패가 $5$장 이상 나왔을 때 이변을 눈치채고 해결해야 합니다. 이변을 눈치챌 수 있는 시점을 구해 주세요.
# 입력
# 첫 번째 줄에 늘어놓을 마작패의 개수 $N$이 주어집니다. $(1 \le N \le 136)$
# 두 번째 줄에 $N$장의 마작패의 종류가 놓아볼 순서대로 공백으로 구분되어 주어집니다. 입력으로 주어지는 모든 마작패는 위에서 설명한 $34$종 중 하나입니다.
# 출력
# $i$번째 패를 놓은 이후에 이변을 눈치챌 수 있다면 $i$를 출력합니다. 패를 끝까지 늘어놓아도 이변을 눈치채지 못한다면, 대신 0을 출력합니다.
# 예제 입력 1
# 8
# 1z 2z 5z 5z 5z 5z 5z 3z
# 예제 출력 1
# 7
# 예제 입력 2
# 13
# 1m 1m 1m 2m 3m 4m 5m 6m 7m 8m 9m 9m 9m
# 예제 출력 2
# 0
import sys
n = input()
n2 = input().split()
mhjong = dict()
for i1, i2 in enumerate(n2):
# print(i1, i2)
if i2 in mhjong:
mhjong[i2] += 1
else:
mhjong[i2] = 1
if 5 in mhjong.values():
print(i1 + 1)
quit()
print(0)