[백준 16165 (실버3)] 걸그룹 마스터 준석이(파이썬)

문제출처

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

문제분석

① 걸그룹에 대한 정보를 입력 받은 후에 ② 퀴즈의 유형에 따라 출력하는 값의 형태가 결정되는 프로그램을 구현하는 문제였다.

 

예를 들어, '사나'와 1을 퀴즈로 입력 받으면 '사나가 속한 그룹의 이름'을 출력해야 하고 '레드벨벳'과 0을 퀴즈로 입력받으면 '레드벨벳'에 속한 멤버들의 이름을 알파벳 순으로 출력해야한다.

 

퀴즈의 유형은 1과 0으로 구분된다. 1이면 멤버의 이름으로 그룹명을 찾아야 하고 0이면 그룹명으로 멤버의 모든 이름을 찾아야 한다.

 

문제접근

dict을 활용하기로 하였다. 이름을 조회해서 관련 된 이름을 검색하기에 dict이 좋기 때문이다. 

 

dict은 키와 값으로 이뤄진다. hash table을 파이썬에 구현한 자료구조다. 

식별자로서 고유해야하고 불변자료형(문자열, 정수형, 튜플..)을 사용해야한다.

키와 연관 된 데이터다. 값은 중복될 수 있다.

 

dict의 사용법과 사용시 유의사항은 다음의 블로그를 참조하자.

https://easyitwanner.tistory.com/270

 

[Python] 파이썬 딕셔너리(Dictionary)란?

목차 키-값 쌍이란? 딕셔너리(Dictionary) 자주 발생하는 실수 유형 키-값 쌍이란? Python 딕셔너리에서 키와 값은 키-값 쌍을 형성하는 두 가지 주요 구성 요소입니다. 키(key) 키는 딕셔너리에 저장된

easyitwanner.tistory.com

 

코드 구현

import sys

input = sys.stdin.readline

group_total, quiz_total = map(int, input().split())

groups = {}
members = {}

# 걸그룹 입력 받기
for i in range(group_total):
    group_name = input().strip()
    member_total = int(input())
    group_member = [None] * member_total
    for i in range(member_total):
        member = input().strip()
        group_member[i] = member  # 그룹에 멤버 추가
        members[member] = group_name  # 멤버-그룹 해시맵 만들기
    group_member.sort()  # 이름순으로 정렬
    groups[group_name] = (
        tuple(group_member)  # 사전에 그룹을 키로 그룹멤버 리스트를 값으로 넣기
    )

# 퀴즈 구현

def solve_quiz(quiz, quiz_type):
    if quiz_type == 1:
        find_group = members[quiz]
        print(find_group)
    elif quiz_type == 0:
        group = groups[quiz]
        for member in group:
            print(member)


for i in range(quiz_total):
    quiz = input().strip()
    quiz_type = int(input())
    solve_quiz(quiz, quiz_type)

배운 점

  • dict을 사용할 때는 키를 불변형으로 사용해야한다. 그렇지 않으면 type error가 발생한다.
  • 변수명을 좀 더 간략하고 직관적으로 써야할 것 같다. 함수는 동작과정을 중심으로 이름을 짓는게 좋을 것 같다.