리스트, 딕셔너리로 들어오면 개념이 좀 까다롭다.
아이디어 자체는 간단하지만, 막상 코드로 표현하는 게 쉽지 않은 파트다.
딕셔너리를 잘 활용할 수 있는 백준 문제 중에 7785번 문제에 대한 풀이이다.
https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
import sys
record={}
n = int(sys.stdin.readline())
for _ in range(n):
person, enterOrLeave = map(str, sys.stdin.readline().split())
record[person] = enterOrLeave
present = []
for person, enterOrLeave in record.items():
if record[person] == 'enter':
present.append(person)
present = sorted(present, reverse=True)
for _ in present:
print(_)
1. record라는 딕셔너리를 만든다.
2. person, enterOrLeave = map(str, sys.stdin.ealine().split())에서, 문자열 공백 기준으로 두 개 받고 split으로 찢어서 두 변수에 저장! map(int, ~)가 익숙하니, str 쓰는 것도 잊지 말기
3. 딕셔너리이름[키] = 값으로 키/값 추가 가능
** 이 문제는 출입자 명부를 기준으로, 현재 남아 있는 직원의 이름을 구하는 문제이다. 딕셔너리를 활용하면, 한 인물의 출입 문제를 한 번에 다룰 수 있다. 가령, 철수라는 인물이 들어왔다가 나온다면, 현재 상태는 leave 상태이다. enter 이후에 leave가 덧씌워져 철수 : leave 상태가 되는 점을 이용한다.
4. 딕셔너리상에서 enter 상태인 사람들을 다루지 않고 리스트를 하나 만들어 enter 상태인 사람을 append() 함수를 이용하여 리스트에 추가한다. 여기서 딕셔너리는 append()를 지원하지 않으므로 주의한다. 리스트 = sorted(리스트, reverse=True)로 알파벳 역순으로 정렬한다. present 리스트에 있는 명단을 하나씩 줄바꿈을 이용하여 출력한다.
'프로그래밍 > 백준' 카테고리의 다른 글
[백준/파이썬] 1920 수 찾기 : 이진검색트리 말고 세트(집합)으로 풀기, 시간초과 나는 이유 (0) | 2024.03.31 |
---|---|
[백준/파이썬] 1308번 D-Day (1) | 2024.03.31 |
[백준/파이썬] 1085번 직사각형에서 탈출 (0) | 2024.03.22 |
백준 티어 보는 법, 티어 순서, 문제별 티어 보는 법 (0) | 2024.03.21 |
[파이썬(Python)] 백준 문제 풀이 1065 한수 (1) | 2024.02.12 |