728x90
http://www.acmicpc.net/problem/7785
# 조건
- 각 직원은 자유롭게 출퇴근을 할 수 있다.
- 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다.
- 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.
- 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106)
- 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다.
- "enter"인 경우는 출근, "leave"인 경우는 퇴근이다.
- 회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다.
- 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.
# 접근 방법 및 Solution
- 회사에 출근하는 경우 리스트에 담아준다.
- 이미 리스트에 존재하는데 이름이 또 나온다면 퇴근한 것이므로 remove 해준다.
- 이후 sort를 내림차순으로 하여 출력
- 당연한 '시간초과'
- 따라서, 딕셔너리에 이름이 나온 횟수를 기록해주고
- 홀수인 경우에만 리스트에 새로 담아주어서 출력해주었다.
시간초과 - 리스트 이용
import sys
input = sys.stdin.readline
people = []
N = int(input())
for _ in range(N):
a, b = input().split()
if not a in people:
people.append(a)
else:
people.remove(a)
people.sort(reverse=True)
print(*people, sep='\n')
pass code - 딕셔너리 이용
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
from collections import defaultdict
people = defaultdict(int)
N = int(input())
for _ in range(N):
a, b = input().split()
people[a] += 1
result = [i for i,j in people.items() if j%2]
result.sort(reverse=True)
print(*result, sep='\n')
728x90
'ALGORITHM > 자료구조' 카테고리의 다른 글
[백준 9935번] 파이썬 - 문자열 폭발 (0) | 2022.12.24 |
---|---|
[백준 2263번] 파이썬 - 트리의 순회 (0) | 2022.12.12 |
[백준 1991번] 파이썬 - 트리 순회 (1) | 2022.12.10 |
[백준 1918번] 파이썬 - 후위 표기식 (0) | 2022.12.08 |
[백준 5639번] 파이썬 - 이진 검색 트리 (0) | 2022.12.08 |