99클럽 코테 스터디 6일차 TIL + 문자열, 해시 테이블, 딕셔너리

임정민·2025년 1월 20일
0
post-thumbnail

1. 문제 설명

[문제 내용]

《할리갈리》는 단추가 달린 종 하나와 과일이 그려진 카드들로 구성된 보드게임입니다.

카드에는 총 44종류의 과일이 최대 55개까지 그려져 있습니다. 그려진 과일의 종류는 딸기, 바나나, 라임, 그리고 자두입니다.

게임을 시작할 때 플레이어들은 카드 뭉치를 공평하게 나눠가지며 자신이 가진 카드를 전부 소모하면 패배합니다.

게임은 시작 플레이어가 본인의 카드 뭉치에서 카드 한 장을 공개하는 것으로 시작합니다. 이후 반시계 방향으로 돌아가며 본인의 카드를 한 장씩 공개합니다.

펼쳐진 카드들 중 한 종류 이상의 과일이 정확히 55개 있는 경우 종을 눌러야 하며 가장 먼저 종을 누른 플레이어가 모든 카드를 모아 자신의 카드 뭉치 아래에 놓습니다. 종을 잘못 누른 경우 다른 모든 플레이어에게 카드를 한 장씩 나누어줘야 합니다.

《할리갈리》를 처음 해보는 한별이는 할리갈리 고수인 히나에게 이기기 위해 여러분에게 도움을 청했습니다. 한별이를 도와 펼쳐진 카드들의 목록이 주어졌을 때, 한별이가 종을 쳐야 하는지 알려주세요.

[입력]

첫 번째 줄에 펼쳐진 카드의 개수 NN이 주어집니다.

두 번째 줄부터 NN개의 줄에 걸쳐 한 줄에 하나씩 펼쳐진 카드의 정보가 주어집니다.

카드의 정보는 공백으로 구분된, 과일의 종류를 나타내는 문자열 SS와 과일의 개수를 나타내는 양의 정수 XX로 이루어져 있습니다.

SS는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.

[출력]

한별이가 종을 쳐야 하면 YES을, 아니면 NO를 출력해주세요.

[제한]

  • 1N1000001 \le N \le 100\,000

  • 1X51 \le X \le 5

  • 입력으로 주어지는 모든 수는 정수입니다.

[입출력 예]

2. 풀이

fruit_count = {
    "STRAWBERRY": 0,
    "BANANA": 0,
    "LIME": 0,
    "PLUM": 0
}

N = int(input())  
for _ in range(N):
    S, X = input().split()  
    X = int(X)  
    fruit_count[S] += X 

if 5 in fruit_count.values():
    print("YES")
else:
    print("NO")

3. 회고

3-1. 문제 해결 과정

N을 입력 받고 N에 따라 S와 X를 받아내는 것까지는 성공했다. 문제 힌트에 해시 테이블이 있었는데 파이썬으로 해시 테이블을 어떻게 구현하는게 좋을까 싶었다.

다 구현해야하나 고민하다가 생각해보니 파이썬은 딕셔너리를 이용해서 해시 테이블 문제를 해결할 수 있었다. 할리갈리 조건에 맞추어 카드의 정보가 담긴 딕셔너리를 초기화했다. 이후에는 해당 과일에 맞게 개수를 누적할 수 있도록 했다.

특정 과일이 5개가 되면 YES를 출력하고 그렇지 않으면 NO를 출력한다. 처음에 10개여도 되는 거 아닌가? 했는데 문제 상에는 5개라고 정해주었으니 이에 맞추어 결과를 내올 수 있도록 했다.

3-2. 새롭게 배운 내용

  • 파이썬은 딕셔너리를 이용해서 해시 테이블을 구현할 수 있다.
Dictionary = {
    "A" : 0,
    "B" : 0,
    "C" : 0
}

여기서 A는 KEY, 숫자는 VALUE를 의미한다. (까먹지 말자!)

profile
Data Science and Natural Language Processing

0개의 댓글

관련 채용 정보