목록해시를 사용한 집합과 맵 (11)
기록방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pKGHS/btrMUgbBs3o/aDFB78q5Uxr1qHoCICqZs0/img.png)
👉 문제링크 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 🔸 문제 분석 🔸 N개의 수에서 서로 다른 두 수로 만들 수 있는 수의 개수를 출력한다. 인덱스가 다르면 값이 같아도 다른 수이다. 시간 복잡도 N의 개수가 최대값 2,000이라 가정해도 좋은 수 하나를 찾는 알고리즘의 시간 복잡도는 N^2보다 작아야 한다. (N^2 를 사용하면 다시 N번 반복해서 최종 시간 복잡도는 N^3가 되기 때문) 좋은 수 하나를 찾는 알고리즘은 최소 O(nlongn)이어야 한다. 정렬과 투 포인터 알고리즘 사용 단, 정렬된 데이터에서 자기 자신을 좋은..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/chb9RL/btrK57HjGhY/7Hknii67SGeemKlPx6HHU0/img.png)
👉 문제링크 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 🔸 문제 분석 🔸 옷 이름과 종류를 입력받고, 입을 수 있는 의상 조합의 수를 구한다. 🔸 코드 🔸 for _ in range(int(input())): n = int(input()) weardict = {} for _ in range(n): wear = list(input().split()) if wear[1] in weardict: weardict[wea..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pyrH2/btrK1h9E7hg/D1UNHRSkQlKEmgcqFg9TW1/img.png)
👉 문제링크 17219번: 비밀번호 찾기 첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번 www.acmicpc.net 🔸 문제 분석 🔸 해시 맵 문제이다. 🔸 코드 🔸 import sys n, m = map(int, sys.stdin.readline().rstrip().split()) passwd = dict() for _ in range(n): i = sys.stdin.readline().rstrip().split() passwd[i[0]] = i[1] for _ in range(m): sys.stdout.write(passwd[sys..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjPIUM/btrKHVzTReC/i7A3jZZJaLqrRYIm1XLvK0/img.png)
👉 문제링크 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 🔸 문제 분석 🔸 이름들을 n개 입력받고, 다시 m번 입력받아 겹치는 이름들을 체크한다. 해시를 활용하는 문제이다. 🔸 코드 🔸 import sys n, m = map(int, sys.stdin.readline().split()) name = set() answer = list() for i in range(n): name.add(sys.stdin.readline().rstrip()) for i in range(m): isin = sys.stdin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/l0hVZ/btrKFETA4hd/W0aySAhLyV82YdJizF2x61/img.png)
👉 문제링크 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 🔸 문제 분석 🔸 포켓몬 이름을 입력받고, 번호 혹은 포켓몬 이름으로 검색, 출력한다. 🔸 코드 🔸 import sys n, m = map(int, sys.stdin.readline().split()) book = {} number = 1 for i in range(n): poket = sys.stdin.readline().rstrip() if poket not in book: book[poket] = number num..