[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)