문제 설명
그림 B.1: 할리갈리
《할리갈리》는 단추가 달린 종 하나와 과일이 그려진 카드들로 구성된 보드게임입니다.
카드에는 총 4
종류의 과일이 최대 5 개까지 그려져 있습니다. 그려진 과일의 종류는 딸기, 바나나, 라임, 그리고 자두입니다.게임을 시작할 때 플레이어들은 카드 뭉치를 공평하게 나눠가지며 자신이 가진 카드를 전부 소모하면 패배합니다.
게임은 시작 플레이어가 본인의 카드 뭉치에서 카드 한 장을 공개하는 것으로 시작합니다. 이후 반시계 방향으로 돌아가며 본인의 카드를 한 장씩 공개합니다.
펼쳐진 카드들 중 한 종류 이상의 과일이 정확히
개 있는 경우 종을 눌러야 하며 가장 먼저 종을 누른 플레이어가 모든 카드를 모아 자신의 카드 뭉치 아래에 놓습니다. 종을 잘못 누른 경우 다른 모든 플레이어에게 카드를 한 장씩 나누어줘야 합니다.《할리갈리》를 처음 해보는 한별이는 할리갈리 고수인 히나에게 이기기 위해 여러분에게 도움을 청했습니다. 한별이를 도와 펼쳐진 카드들의 목록이 주어졌을 때, 한별이가 종을 쳐야 하는지 알려주세요.
### 입력
첫 번째 줄에 펼쳐진 카드의 개수 N
이 주어집니다.두 번째 줄부터 N
개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어집니다.카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열
와 과일의 개수를 나타내는 양의 정수 로 이루어져 있습니다. SSTRAWBERRY
, BANANA
, LIME
, PLUM
중 하나입니다.
### 출력
한별이가 종을 쳐야 하면 YES
을, 아니면 NO
를 출력해주세요.
<내 코드>
- 코드
import sys
N = int(sys.stdin.readline())
dict = {}
answer = "NO"
for i in range(N):
S = sys.stdin.readline()
fruit, count = S.split()
c = int(count)
if fruit in dict:
dict[fruit] += c
else :
dict[fruit] = c
for k, v in dict.items():
if v == 5:
answer = "YES"
print(answer)
딕셔너리에 존재하는지 여부에 따라 count한 방식이 뿌듯함
- 반성
sys.stdin.readlin() 에다가 추가로 split()를 하면은 보다 수월하게 가능함
v == 5 일 때에 대한 break 가 없어서 반복이 되어버림
<모범사례>
import sys
# 입력 받기
N = int(sys.stdin.readline().strip())
fruit_counts = {}
# 각 과일의 개수를 딕셔너리에 누적
for _ in range(N):
fruit, count = sys.stdin.readline().strip().split()
count = int(count)
fruit_counts[fruit] = fruit_counts.get(fruit, 0) + count
# 과일 개수가 정확히 5인 경우가 있는지 확인
answer = "NO"
for count in fruit_counts.values():
if count == 5:
answer = "YES"
break # 조건을 만족하면 더 이상 탐색하지 않고 종료
print(answer)
- 좋은점
1. split()를 한번에 함
<보충학습>
- 실무 예
데이터 집계, 필터링에 주로 이용이 됨
log로 이벤트 탐지, 특정 조건의 거래 검출에 유사한 로직 사용가능
- dict 추가 팁
.setdefault(fruit, 0) 을 이용하면 보다 수월함
.get() 의 기본값 이용하면 조건문을 사용안해도 됨
이렇게 하면 안정성과 함께 가독성으로 복잡하게 조건문 사용안해도 됨
fruit_counts = {}
fruit = 'STRAWBERRY'
count = 3
# 기존 값에 count를 추가하는 방식
fruit_counts[fruit] = fruit_counts.get(fruit, 0) + count
fruit_counts 에다가 존재하지않는 'STRAWBERRY' 의 count추가할 때 이렇게도 충분히 가능함
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[string]99클럽 코테 스터디 8일차 TIL + 백준/Bronze/25593. 근무 지옥에 빠진 푸앙이 (Small) (0) | 2024.11.05 |
---|---|
[string]99클럽 코테 스터디 7일차 TIL + 백준/Bronze/31562. 전주 듣고 노래 맞히기 (0) | 2024.11.04 |
[string]99클럽 코테 스터디 5일차 TIL + 백준/Bronze/9094. 수학적 호기심 (1) | 2024.11.01 |
[string]99클럽 코테 스터디 4일차 TIL + 프로그래머스/1/81301. 숫자 문자열과 영단어 (1) | 2024.11.01 |
[string]99클럽 코테 스터디 3일차 TIL + 프로그래머스/1/147355. 크기가 (0) | 2024.10.31 |