프로그래밍/백준

[백준/파이썬] 7785번 회사에 있는 사람(딕셔너리, 리스트 활용 문제)

정정훈훈 2024. 3. 24. 00:53
반응형

 

리스트, 딕셔너리로 들어오면 개념이 좀 까다롭다.

아이디어 자체는 간단하지만, 막상 코드로 표현하는 게 쉽지 않은 파트다.

 

딕셔너리를 잘 활용할 수 있는 백준 문제 중에 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. 딕셔너리이름[키] = 값으로 키/값 추가 가능

728x90

** 이 문제는 출입자 명부를 기준으로, 현재 남아 있는 직원의 이름을 구하는 문제이다. 딕셔너리를 활용하면, 한 인물의 출입 문제를 한 번에 다룰 수 있다. 가령, 철수라는 인물이 들어왔다가 나온다면, 현재 상태는 leave 상태이다. enter 이후에 leave가 덧씌워져 철수 : leave 상태가 되는 점을 이용한다.

SMALL

4. 딕셔너리상에서 enter 상태인 사람들을 다루지 않고 리스트를 하나 만들어 enter 상태인 사람을 append() 함수를 이용하여 리스트에 추가한다. 여기서 딕셔너리는 append()를 지원하지 않으므로 주의한다. 리스트 = sorted(리스트, reverse=True)로 알파벳 역순으로 정렬한다. present 리스트에 있는 명단을 하나씩 줄바꿈을 이용하여 출력한다.

반응형