TODAY TIL

안녕하세요! 이번 포스팅에서는 보드게임 할리갈리와 관련된 흥미로운 코딩 문제를 다뤄보겠습니다. 게임에서 한별이가 종을 쳐야 할 시점을 자동으로 판단하는 코드를 작성하는 방법을 단계별로 설명하겠습니다.

 

📋 문제 설명

할리갈리 게임은 과일이 그려진 카드들과 종으로 이루어져 있습니다. 카드를 차례로 펼쳐서 한 종류의 과일이 정확히 5개가 될 때 가장 먼저 종을 쳐야 하는 게임입니다. 만약 한 종류의 과일이 5개가 되는 순간을 놓치지 않고 종을 칠 수 있도록 도와주는 프로그램을 만들어봅시다!

 

입력 조건

  • 첫 번째 줄: 펼쳐진 카드의 개수 NN
  • 이후 각 줄에는 과일 종류 SS과일 개수 XX가 주어집니다.
  • 과일 종류는 STRAWBERRY, BANANA, LIME, PLUM 중 하나입니다.

출력 조건

  • 종을 쳐야 하면 "YES"를, 그렇지 않으면 "NO"를 출력합니다.

 

📝 문제 접근 방법

문제를 풀기 위해 각 과일의 개수를 누적한 후, 어떤 과일이 정확히 5개인지 확인하는 과정을 거칩니다.

  1. 입력 데이터 처리: 카드의 개수 NN과 카드별 과일 정보를 입력받습니다.
  2. 과일 개수 누적: 각 과일에 대한 개수를 누적하여 관리합니다.
  3. 종을 칠 조건 확인: 모든 카드의 정보를 누적한 후, 과일의 총 개수가 정확히 5인 과일이 있는지 확인합니다.

이제 코드로 문제를 해결해 보겠습니다.

# 입력 받기
N = int(input())  # 펼쳐진 카드 개수
fruit_counts = {"STRAWBERRY": 0, "BANANA": 0, "LIME": 0, "PLUM": 0}

# 카드 정보를 받아서 과일 수 누적
for _ in range(N):
    S, X = input().split()
    X = int(X)
    fruit_counts[S] += X

# 종을 칠 조건 확인
should_ring_bell = any(count == 5 for count in fruit_counts.values())

# 결과 출력
if should_ring_bell:
    print("YES")
else:
    print("NO")

 

코드 설명

  1. fruit_counts 딕셔너리를 통해 각 과일의 개수를 0으로 초기화합니다.
  2. 각 카드를 처리하면서 S와 X의 값을 읽고, fruit_counts의 해당 과일에 X를 더합니다.
  3. any(count == 5 for count in fruit_counts.values())로 과일이 정확히 5개가 된 경우를 확인합니다.
  4. 조건에 따라 "YES" 또는 "NO"를 출력합니다.

입력 예시

3
STRAWBERRY 2
BANANA 3
STRAWBERRY 3

 

출력 예시

YES

 

위 입력에서는 딸기가 총 5개(2 + 3)가 되므로, 한별이는 종을 쳐야 합니다.

 

🧩 마무리

이번 포스팅에서는 할리갈리 게임에서 종을 쳐야 하는 시점을 자동으로 판별하는 코드를 구현해 보았습니다. 과일 개수를 누적하면서 조건을 확인하는 문제를 통해 딕셔너리와 반복문의 활용을 연습할 수 있었습니다. 앞으로도 다양한 게임과 관련된 문제로 알고리즘을 즐겁게 풀어보아요!

 

TODAY TIL

 오늘은 파이썬에서 자주 사용하는 딕셔너리for문, replace를 쉽게 이해하고 활용하는 방법을 프로그래머스에 관련 문제를 풀어보면서 정리하려고 합니다. 이 글을 통해 딕셔너리의 키와 값, 그리고 이를 활용하는 방법을 알기 쉽게 설명해 보겠습니다.

 

문제 상황: 숫자와 영단어의 변환

코딩을 하다 보면 숫자를 영단어로 바꾸거나, 영단어를 숫자로 바꿔야 하는 상황이 생깁니다. 예를 들어 "one4seveneight" 같은 문자열이 있으면 "1478"로 바꾸고 싶을 때, 파이썬에서 딕셔너리를 활용해 쉽게 해결할 수 있습니다.

 

1. 딕셔너리의 이해: 키와 값

딕셔너리는 두 가지 요소로 이루어져 있습니다:

  • 키 (key): 특정 값을 찾는 데 사용되는 이름입니다.
  • 값 (value): 키에 연결된 실제 데이터입니다.

예를 들어, 숫자와 그에 해당하는 영단어를 딕셔너리로 표현해 보겠습니다.

number_dict = {
    "zero": "0",
    "one": "1",
    "two": "2",
    "three": "3",
    "four": "4",
    "five": "5",
    "six": "6",
    "seven": "7",
    "eight": "8",
    "nine": "9"
}

 

이 딕셔너리에서 는 "zero", "one" 같은 영단어이고, 은 "0", "1" 같은 숫자로 이루어진 문자열입니다.

 

2. 딕셔너리와 for문: 키와 값을 쌍으로 사용하기

 딕셔너리를 반복문 for에서 사용할 때, 키만 가져올 수도 있지만, items() 메서드를 사용하면 키와 값을 쌍으로 가져올 수 있습니다.

예를 들어, for word, digit in number_dict.items():라고 쓰면 word는 키, digit는 값이 됩니다. 따라서, number_dict의 "zero"와 "0"처럼 한 쌍씩 꺼내 올 수 있습니다.

이 구조를 활용해 문자열 속의 영단어를 숫자로 바꿀 수 있습니다.

 

3. replace() 함수로 변환하기

이제 replace() 함수를 활용해 봅시다. replace(찾을 문자열, 바꿀 문자열) 형태로 쓰며, 문자열에서 찾을 부분을 바꿀 부분으로 교체해 줍니다.

예를 들어 s.replace(word, digit)로 for문 안에서 영단어를 숫자로 바꾸는 작업을 할 수 있습니다.

 

 

최종 코드 예시

이제 모든 내용을 종합해서 최종 코드를 작성해 보겠습니다. 예를 들어, "one4seveneight"을 "1478"로 바꾸는 코드입니다:

 

def solution(s):
    # 숫자 영단어 변환표
    number_dict = {
        "zero": "0", "one": "1", "two": "2", "three": "3", "four": "4",
        "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"
    }

    # for문과 replace로 변환하기
    for word, digit in number_dict.items():
        s = s.replace(word, digit)

    return int(s)  # 숫자 형태로 변환 후 반환

 

이 코드는 for문을 통해 딕셔너리의 각 키와 값을 가져와 replace로 문자열에서 단어를 숫자로 교체한 후, 숫자로 반환합니다.

 

정리

  • 딕셔너리는 키-값 쌍으로 구성되어 있습니다.
  • **for word, digit in dict.items()**를 사용하면 키와 값을 한 쌍씩 가져올 수 있습니다.
  • replace() 함수는 찾을 부분과 바꿀 부분을 인자로 받아 문자열을 교체합니다.

이 글을 통해 딕셔너리와 for문, 그리고 replace의 활용법을 잘 이해하셨길 바랍니다! 더 쉬운 설명이나 추가 질문이 있다면 언제든지 댓글로 남겨 주세요. 😊

+ Recent posts