문제
로그 데이터를 바탕으로 회사에 있는 사람이 누구인지 사전 역순으로 출력하기
풀이
로그 데이터는 이름이랑 상태가 있는데 상태가 enter면 출근한거고 leave면 퇴근한거다. 그니까 이걸 토대로 현재 회사에 있는 사람을 찾으면 되는데… 아 이거 머리 터진다 그죠? 근데 머리 터질 일이 1도 없음. 일단 이 문제의 카테고리가 집합인 것을 잊지 말자.
import sys
K = int(sys.stdin.readline())
person = set()
K는 로그가 몇 줄이냐는 얘기고 person은 현재 회사에 있는 사람들을 표시하기 위한 집합. set이면 중괄호 안에 들어가는 건 맞는데, 그렇다고 걍 중괄호 치면 딕셔너리 되니까 주의하자.
import sys
K = int(sys.stdin.readline())
person = set()
for _ in range(K):
who, where = sys.stdin.readline().split()
print(who, where)
그 다음은 간단하다. 입력을 받을건데, 받아서 enter면 set에 넣고, leave면 set에서 뺀다. 끝이다. 솔직히 분리돼서 들어오는거 어떻게 할 지 막막하셨쥬? 근데 입력받을 때 변수 하나만 쓰라고는 안 했다.
import sys
K = int(sys.stdin.readline())
person = set()
for _ in range(K):
who, where = sys.stdin.readline().split()
if where == 'enter':
person.add(who)
elif where == 'leave':
person.discard(who)
print(person)
이게 끝이다. set에서 뺄 때 뭐라고 하는지 까먹어서 자동완성으로 나온 discard() 썼음… discard도 버리다 뭐 이런 뜻이잖아요? 근데 이따 최종 코드를 보면 아시겠지만 discard 아니고 remove가 맞습니다. 아무튼 그럼. 그럼 우리에게 남은 건 뭐냐… 이걸 ‘사전 역순’으로 정렬하는건데, set은 정렬따원 되지 않는다. 그럼 어떻게 하냐고?
person = sorted(list(person))
person = reversed(person)
for i in person:
print(i)
테마가 set인거지 리스트를 쓰지 말라고는 안 했음. 리스트로 바꾸면서 sorted()로 정렬하고 그걸 reversed()로 뒤집어서 출력하면 된다.
import sys
K = int(sys.stdin.readline())
person = set()
for _ in range(K):
who, where = sys.stdin.readline().split()
if where == 'enter':
person.add(who)
elif where == 'leave':
person.remove(who)
person = sorted(list(person))
person = reversed(person)
for i in person:
print(i)
그래서 이거 내면 맞음.
Reply