개발 공부용

[백준] 27160 - 할리갈리 본문

코딩 테스트/99클럽 TIL

[백준] 27160 - 할리갈리

솝제로 2025. 1. 20. 17:01

문제 출처: https://www.acmicpc.net/problem/27160

 

문제
할리갈리 보드게임.
카드에는 총 4종류의 과일(딸기, 바나나, 라임, 자두)이 최대 5개까지 그려져있다.
각 플레이어는 본인의 카드 뭉치에서 카드를 한 장씩 동시에 공개한다.
펼쳐진 카드들 중 한 종류 이상의 과일이 정확히 5개 있는 경우 종을 누른다.

 

입력
  • 첫 번째 줄에는 펼쳐진 카드의 개수 N이 주어짐.
  • 두 번째 줄부터 N개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어짐.
  • 카드의 정보는 공백으로 구분된 과일의 종류를 나타내는 문자열 S와 과일의 개수를 나타내는 양의 정수 X로 이루어짐
  • 1<=N<=100,000
  • 1<=X<=5
e.g)
1
BANANA 2

 

출력
  • 종을 쳐야하면 YES, 아니면 NO 출력

 

내 문제 풀이 방법
  1. sys.stdin.readline()로 한 줄씩 읽어옴.
  2. 첫 번째 줄에서 N은 변수로 저장
  3. 두 번째 줄부터 반복문 돌면서 S와 X는 딕셔너리 형태로 저장
  4. 입력받은 S가 key에 존재하면 기존 value에 입력받은 X를 더해서 값을 바꾼다.
  5. 모든 입력을 다 읽고 value의 값이 5인 키가 존재하면 YES를 출력한다.
  6. 없으면 NO를 출력한다.

 

내 코드
import sys

N = int(sys.stdin.readline().strip()) #1, 2
a = {}

for _ in range(N): #3
    card = sys.stdin.readline().strip().split()
    card[1]=int(card[1])
    if(card[0] in a): #4
        a[card[0]]+=card[1]
    else :
        a[card[0]]=card[1]

bell = False

for i in a.keys(): #5
    if(a[i]==5):
        bell = True

if(bell==True):
    print('YES') 
else: #6
    print('NO')

 

 

위에는 내가 푼 방법이다.

나는 해당 과일이 딕셔너리에 있는지 없는지 확인하고 있는 경우 value 수정, 없는 경우 추가하도록 했다.

 

다른 풀이에서는 과일의 종류가 이미 정해져 있으므로,

과일의 이름을 key, 과일의 개수인 value를 0으로 하는 딕셔너리를 미리 선언하고

입력받은 S에 해당하는 과일을 찾아 value만 수정하도록 했다.

 

또 과일이 5개인지 확인할 때도 key 리스트를 반복문으로 돌면서 value가 5인 값이 있는지 확인했다.

다른 풀이에서는 그냥 value 리스트에서 5가 있는지만 확인했다.

어떤 과일이 5개인지 알아야 하는 문제가 아니어서 이 방법이 더 효율적인 것 같다.

 

다른 풀이
N = int(input()) # 카드 개수
fruits = {"STRAWBERRY": 0, "BANANA": 0, "LIME":0, "PLUM": 0} # 과일 이름을 key로 가지는 딕셔너리
for _ in range(N):
    S, X = input().split()
    fruits[S] += int(X) # 해당하는 과일의 갯수를 더함
    
if 5 in fruits.values(): # fruits의 value 리스트에 5가 있는지 확인
    print('YES')
else:
    print('NO')
    
#출처: https://1ncomparable.tistory.com/370

 

 

내 코드와 다른 코드를 비교하면서 내가 어떤 부분을 놓쳤는지 알 수 있게 되는 것 같다.

 

 

'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글

[백준] 32978 - 아 맞다 마늘  (2) 2025.01.23
[백준] 15829 - Hashing  (0) 2025.01.22
[백준] 10798 - 세로읽기  (0) 2025.01.18
[백준] 11945 - 뜨거운 붕어빵  (0) 2025.01.17
[백준] 2675 - 문자열 반복  (0) 2025.01.16