회사에 있는 사람
회사에 출입하는 사람의 기록이 남는다.
이 기록을 통해 회사에 남아있는 사람의 목록을 출력한다.
알고리즘
회사에 남아있는 사람을 체킹해야 하므로 출입 카운트를 해주었다.
- 입장 + 퇴장은 무조건 짝수이므로 홀수 카운팅이된 사람은 회사에 남아있는 사람이다.
- 입력 받은 이름을 정답 출력에 사용해야 하고 각각의 사람마다 카운팅 기록을 남겨주어야 하기 때문에 딕셔너리를 활용했다.
전체 코드와 알게된 점
import sys; input = sys.stdin.readline
n = int(input())
dic = dict()
least_name = []
for _ in range(n):
name = input().rstrip().split()
key = name[0]
# enter와 leave 카운트
if dic.get(key): dic[key] += 1
else: dic[key] = 1
# 1번만 카운트 된 사람 == 아직 남아 있는 사람
for k, v in dic.items():
if v % 2 == 1 :
least_name.append(k)
ans = sorted(least_name, key = lambda x : x, reverse = True)
for i in ans:
print(i)
내 코드는 이와 같은데 훨씬 간결하고 빠른 코드가 있어 첨부한다. 백준 사이트 문제 현황의 ugun0901py님의 코드이다.
import sys
input = sys.stdin.readline
N = int(input())
company = {}
for _ in range(N):
man, state = input().rstrip().split()
if state == 'enter':
company[man] = True
else:
del company[man]
# 출력
print("\n".join(sorted(company.keys(), reverse=True)))
내 코드와 다르게 잘 작성된 점은 다음과 같다.
- 직접 카운팅 하지 않고 True, False로 걸러준 것
- 이렇게 하면 딕셔너리에 어떤 숫자를 추가해주기 위한 dic.get() 체크를 하지 않아도 돼서 코드가 훨씬 간결해진다.
- lambda를 써서 정렬할 때 key를 지정하지 않고, dic.keys() 를 통해 바로 문자열 정렬을 해준 것
- 한 줄 한 줄 출력할 때는 for문 대신 "\n".join() 을 사용한 것
전체적으로 코드를 훨씬 직관적이고 간결하게 잘 작성하셔서 많이 배울 수 있었다.
'PS > BOJ&Programmers' 카테고리의 다른 글
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.02.03 |
---|---|
[프로그래머스] 조건에 맞는 도서 리스트 출력하기 | DATE (0) | 2024.02.01 |
[백준/1015] 수열 정렬 (1) | 2023.09.30 |
[백준/11004] K번째 수 | Python 정렬 함수의 알고리즘 (0) | 2023.08.02 |
[백준/1032] 명령 프롬프트 | 문자열 비교 (0) | 2023.07.04 |