노베이스 알고리즘 공부 #9. 백준 27160 할리갈리 - Python

Anny·2024년 3월 31일
0

https://www.acmicpc.net/problem/27160

1. 문제

-- (대충 할리갈리에 관한 설명) -> 같은 과일이 반드시 5개만 있어야함
-- 한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요.

입력
-- 첫 번째 줄에 펼쳐진 카드의 개수 N
-- 두 번째 줄부터 N개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어짐
-- 카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열 S와 과일의 개수를 나타내는 양의 정수 X로 이루어져 있습니다.
--  S는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.

2. 풀이

2-1. 접근

  1. 과일과 갯수 분리
  2. 과일 별 갯수 더하기
  3. 과일 별 갯수 중 5개 이상인 과일이 있으면 YES 출력

하는 방식으로 구상하면 되지 않을까,,

2-2. 뼈대 잡기

N = int(input())

ring_bell = False
for_ in range(N):
    fruit, quant = input().split()
    quant = int(quant)
    
    if quant >= 5:
        ring_bell = True
        break

if ring_bell:
    print("YES")
else:
    print("NO")

까진 알겠는데, ~과일의 갯수를 구분해서 저장할 방법을 고안하다가 지난주 코드 리뷰에서 본 딕셔너리가 기억나서 시도해봄

2-3. 딕셔너리

Key 값과 Value 값이 한 쌍으로 이루어진 자료형.

{Key1: Value1, Key2: Value2, Key3: Value3, ...}

와 같이 사용이 가능하며, 이 문제 같은 경우는

{STRAWBERRY: 5, BANANA: 1, LIME: 4, PLUM: 3}

이런식으로 저장해서 5 이상의 value값이 있는 자료가 있으면 Yes를 출력하게 만들고 싶은 것,,

N = int(input())

fruits_quant = {}

for_ in range(N):
    fruit, quant = input().split()
    quant = int(quant)
    
    if fruit in fruit_quant:
        fruit_quant[fruit] += quant
    else:
        fruit_quant[fruit] = quant

ring_bell = any(count >= 5 for count in fruit_quant.values())
        
if ring_bell:
    print("YES")
else:
    print("NO")

이런데도 정답이 안나와서 결국 구글링,,

N = int(input())

# 딕셔너리를 초기화합니다.
fruit_counts = {
    'STRAWBERRY': 0,
    'BANANA': 0,
    'LIME': 0,
    'PLUM': 0
}

for _ in range(N):
    fruit, quant = input().split()
    quant = int(quant)
    fruit_counts[fruit] += quant

ring_bell = any(count >= 5 for count in fruit_counts.values())
        
if ring_bell:
    print("YES")
else:
    print("NO")

ㅠㅠ 딕셔너리 초기화 시켜도 틀린다.. 왜 일까,,,

2-4. 문제를 제발 꼼꼼히 읽자.

2-1. 접근에서 3번 "과일 별 갯수 중 5개 이상인 과일이 있으면 YES 출력" 이어야함.
5개 이상이 아닌 5개인 과일이 있으면이기 때문에

N = int(input())

# 딕셔너리를 초기화합니다.
fruit_counts = {
    'STRAWBERRY': 0,
    'BANANA': 0,
    'LIME': 0,
    'PLUM': 0
}

for _ in range(N):
    fruit, quant = input().split()
    quant = int(quant)
    fruit_counts[fruit] += quant

ring_bell = any(count == 5 for count in fruit_counts.values())
        
if ring_bell:
    print("YES")
else:
    print("NO")

카운트 == 수정을 통해서 정답

profile
Newbie

0개의 댓글