이름과 출근 또는 퇴근을 입력 받고
현재 출근해 있는 사람의 이름을 내림차순으로 출력하는 문제
문제
상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.
각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.
상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다.
회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.
출력
현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.
if else 구문으로
입력에 출근
퇴근
sorted
[list].sort
처음에 리스트로 이름을 저장하고 삭제했는데, 시간 초과가 나와서 집합을 이용했습니다.
import sys
input = sys.stdin.readline
answer = set() # list 보다 set으로 하는게 연산이 더 빠릅니다.
for _ in range(int(input())):
name, log = input().split()
if log == "enter": answer.add(name)
else: answer.remove(name) # list.remove()는 시간이 많이 걸려서, 시간 초과 나왔습니다.
answer = sorted(answer, reverse=True) # 내림차순 정렬
print(*answer, sep = "\n")
딕셔너리를 사용하니 조금 더 빠르게 풀리네요.
딕셔러리의 key 값들이 위의 리스트와 같은 역할을 합니다.
import sys
input = sys.stdin.readline
answer = {}
for _ in range(int(input())):
name, log = input().split()
if log == "enter": answer[name] = 1
else: del answer[name]
print("\n".join(sorted(answer.keys(), reverse=True)))
앞에서는 *로 answer를 언팩킹하고 각 원소를 출력하면서 사이에 줄바꿈
두번째에서는 join 함수로 "\n"으로 내림차순 정리된 answer.key
예제 입력 1
4
Baha enter
Askar enter
Baha leave
Artem enter
예제 출력 1
Askar
Artem
'IT > Python' 카테고리의 다른 글
[백준] 15651번 N과 M[3] [Python] - 중복순열 0 | 2023.07.28 |
---|---|
[백준] 15650번 N과 M[2] [Python] - 조합 0 | 2023.07.28 |
[백준] 15649번 N과 M[1] [Python] - 순열 0 | 2023.07.28 |
[백준] 1620번 나는야 포켓몬 마스터 이다솜 [Python] 0 | 2023.07.27 |