1. 문제 요약
https://www.acmicpc.net/problem/16165
- 여러 개의 아이돌 그룹이 주어진다.
- 각 그룹에는 여러 멤버가 존재한다.
- 이후 두 가지 질의가 주어진다.
2. 질의 유형
1) 0번: 그룹 이름 → 멤버 목록 출력 (사전순)
2) 1번: 멤버 이름 → 소속 그룹 출력
2. 처음 접근 (리스트 기반)
처음에는 단순하게 생각해서:
- groups: 그룹 이름 리스트
- members: 각 그룹의 멤버 리스트
이렇게 저장했다.
groups, members = [], [[] for _ in range(n)]
그리고 질의 처리 시:
- 그룹 찾기 → groups 순회
- 멤버 찾기 → members 전체 순회 + in 검사
이후 오답처리되어 딕셔너리 형식으로도 처리해보았다.
3. 문제점(오답 코드)
1) 리스트
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
groups, members = [], [[] for _ in range(n)]
for i in range(n):
group = input().rstrip()
k = int(input())
groups.append(group)
for _ in range(k):
members[i].append(input().rstrip())
for _ in range(m):
where = input().rstrip()
quiz = int(input())
if quiz == 0:
for i, group in enumerate(groups):
if where == group:
print(*members[i], sep='\n')
if quiz == 1:
for i, member in enumerate(members):
if where in member:
print(groups[i])
2) 딕셔너리
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
groups = {}
members = {}
for i in range(n):
group = input().rstrip()
k = int(input())
members[group] = []
for _ in range(k):
member = input().rstrip()
groups[member] = group
members[group].append(member)
for _ in range(m):
where = input().rstrip()
quiz = int(input())
if quiz == 0:
print(*members[where], sep='\n')
else:
print(groups[where])
4. 개선 필요성
개선 접근
그래서 문제를 다시 읽어보았다.
퀴즈의 종류가 0일 경우 해당 팀에 속한 멤버의 이름을 사전순으로 한 줄에 한 명씩 출력한다.
라는 부분이 있었고, 조건에 맞춰 멤버들을 정렬하여 정답을 맞출 수 있었다.
5. 개선 후 코드
1) 리스트
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
groups, members = [], [[] for _ in range(n)]
for i in range(n):
group = input().rstrip()
k = int(input())
groups.append(group)
for _ in range(k):
members[i].append(input().rstrip())
members[i].sort()
for _ in range(m):
where = input().rstrip()
quiz = int(input())
if quiz == 0:
for i, group in enumerate(groups):
if where == group:
print(*members[i], sep='\n')
if quiz == 1:
for i, member in enumerate(members):
if where in member:
print(groups[i])
2) 딕셔너리
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
groups = {}
members = {}
for i in range(n):
group = input().rstrip()
k = int(input())
members[group] = []
for _ in range(k):
member = input().rstrip()
groups[member] = group
members[group].append(member)
members[group].sort()
for _ in range(m):
where = input().rstrip()
quiz = int(input())
if quiz == 0:
print(*members[where], sep='\n')
else:
print(groups[where])
'코딩테스트' 카테고리의 다른 글
| [백준] 20166번 - 문자열 지옥에 빠진 호석 (3) | 2026.03.26 |
|---|---|
| [백준] 19583번 - 싸이버개강총회 (0) | 2026.03.25 |
| [백준] 13414번 - 수강신청 (0) | 2026.03.23 |
| [백준] 16139 - 인간-컴퓨터 상호작용 (0) | 2026.03.20 |
| [백준] 2559 - 수열 (0) | 2026.03.19 |