-
[백준] 7785번 회사에 있는 사람Algorithm Study/Python 2024. 11. 10. 23:41
https://www.acmicpc.net/problem/7785
문제설명
위 문제는 들어온 사람과 나온 사람을 체크하는 단순한 문제이다.
단순하게 LIST에 추가하여 LEAVE가 나오면 제외하는 방식으로 풀어도 되지만입력의 숫자가 10^6으로 많다는 것을 고려해야한다.
만약 모든 입력이 enter인 경우에 1+2+...+10^6-1번의 연산이 필요하다.
즉, 리스트로 구현하는 경우 시간 제한에 걸리게 된다.탐색시간을 줄일 수 있는 방법인 set이나 dictionary를 통해 구현하면 탐색 시간은 항상 1 데이터의 갯수를 10^6으로 가정했을 때 충분히 시간 내에 구할 수 있다.
풀이
n = int(input()) names = dict() for i in range(n): data = input().split() if data[1] == 'enter': names[data[0]] = 0 elif data[1] == 'leave': names.pop(data[0], None) temp = list(names.keys()) for i in sorted(temp, reverse=True): print(i)
먼저 dictionary를 선언한다. 기본 dictionary의 경우 최초값이 들어올 때 초기화를 해줘야하기 때문에
enter를 입력받으면 안에 값을 0으로 초기화했다. (key - value를 생성하는 작업)
그리고 leave가 들어오면 해당 key에 대한 값을 삭제한다.위 방법처럼 진행하면 들어와서 나가지 않은 이름에 대한 것만 key가 생성되어
마지막에 key들만 정렬하여 출력하면 된다.기본 dictionary 문제라서 어렵지 않을 수 있지만 dictionary의 기본 개념과 최초 key를 생성할 때는 초기화해줘야한다는
개념을 알고가면 좋을 것 같다.'Algorithm Study > Python' 카테고리의 다른 글
[백준] 1157 단어 공부 (0) 2024.11.13 [백준] 16165번 걸그룹 마스터 준석이 (0) 2024.11.11 [백준] 10431번 줄세우기 (0) 2024.07.17 [백준] 1009번 설탕 배달 (0) 2024.07.11 [백준] 2839번 설탕 배달 (0) 2024.07.01