โ 1620 ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ โ
import sys
input=sys.stdin.readline
pokemon={}
N,M=map(int,input().strip().split())
for i in range(N):
pokemon[input().strip()]=i+1
pokemon_list=list(pokemon.keys())
for _ in range(M):
problem=input().strip()
if problem.isalpha():print(pokemon[problem])
else:print(pokemon_list[int(problem)-1])
๐ฝ ํฌ์ผ๋ชฌ ๋ฒํธ๋ฅผ ๋งํ๋ฉด ํฌ์ผ๋ชฌ ์ด๋ฆ์ ์ถ๋ ฅํ๊ณ , ๋ฐ๋๋ก ํฌ์ผ๋ชฌ ์ด๋ฆ์ ๋งํ๋ฉด ํฌ์ผ๋ชฌ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋, ์ฆ ๋ ๊ฐ์ง ์ ๋ณด ํฌ์ผ๋ชฌ ๋ฒํธ์ ํฌ์ผ๋ชฌ ์ด๋ฆ์ ์ ์ฅํ๊ณ , ๋ง์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ searchingํ๋ ๋ฐ ํจ์จ์ ์ธ ์๋ฃ๊ตฌ์กฐ hash-table์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๐ฝ hash-table searching์ฐ์ฐ
โ pokemon[problem]์ผ๋ก, ํฌ์ผ๋ชฌ ์ด๋ฆ์ธ key์ ํด๋นํ๋ ํฌ์ผ๋ชฌ ๋ฒํธ value ์ถ๋ ฅ O(1)
โก pokemon์ keys๋ฅผ list๋ก ๋ง๋ค๊ณ , list์ indexing์ผ๋ก ํฌ์ผ๋ชฌ ์ด๋ฆ key ์ถ๋ ฅ O(1)
โ 1764 ๋ฃ๋ณด์ก โ
import sys
input=sys.stdin.readline
not_listened=set()
N,M=map(int,input().split())
total=0
ans=[]
for _ in range(N):
not_listened.add(input().rstrip())
for _ in range(M):
not_seen_name=input().rstrip()
if not_seen_name in not_listened:
total+=1
ans.append(not_seen_name)
print(total)
ans.sort()
print(*ans,sep='\n')
๐ฝ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, ํ์ด์ฌ์์ hash table์ ์ฌ์ฉํ ์งํฉ์ธ set์ ์ฌ์ฉํ๋ค.
๐ฝ set์ in operation์ O(1)๋ก, list์ in operation O(N) ๋๋น ํจ์จ์ด ์ข์ ์์ ๊ฐ์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์ ๋ ฅํ ๋ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ.
โ 17219 ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ โ
import sys
input=sys.stdin.readline
N,M=map(int,input().split())
d=dict()
for j in range(N):
address,password=input().split()
d[address]=password
for k in range(M):
print(d[input().rstrip()])
๐ฝ ๋น๋ฐ๋ฒํธ์ ์ฃผ์ ์ด 2๊ฐ์ง ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๊ณ , ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ์ฃผ์๋ฅผ ๋ฐ๋ก ์ฐพ์์ฃผ๋ hash table์ ๋ง๋ค๋ฉด ๋!
โ 20291 ํ์ผ ์ ๋ฆฌ โ
import sys
input=sys.stdin.readline
dic={}
for _ in range(int(input())):
name=input().rstrip().split('.')[1]
if len(dic) == 0:
dic[name] = 1
else:
if name in dic.keys():
dic[name]+=1
else:
dic[name]=1
sorted_dic = sorted(dic.items(), key=lambda item : item[0])
for tup in sorted_dic:
print(tup[0], tup[1])
๐ฝ hash map์ key๋ ํ์ผ ํ์ฅ์ ์ด๋ฆ, ๊ทธ๋ฆฌ๊ณ value๋ ๊ฐ ํ์ฅ์๋ณ ๊ฐ์๋ก ์ค์ ํ๋ค. keys()์ in ์ฐ์ฐ์๋ O(1)๋ก ์ฝ๊ฒ value๋ฅผ ๋ํ๊ฑฐ๋ value๋ฅผ 1๋ก ์ค์ ํด hash map์ ์ ๋ฐ์ดํธ ํ๋ค.
โ 7785 ํ์ฌ์ ์๋ ์ฌ๋ โ
import sys
input=sys.stdin.readline
l=set()
for _ in range(int(input())):
name,kind=input().split()
if kind=='enter':l.add(name)
else:l.remove(name)
print(*sorted(l,reverse=True),sep='\n')
๐ฝ set ์งํฉ์ผ๋ก ๋ง๋ค์ด (๋๋ช ์ด์ธ์ด ์์ผ๋ฏ๋ก ์งํฉ ๋ง๋ค๊ธฐ ๊ฐ๋ฅ) add()์ remove()๋ผ๋ O(1) ์๊ฐ ๋ณต์ก๋์ ํจ์จ์ ์ธ method๋ฅผ ํ์ฉํด ์ฑ๋ฅ์ ๋์๋ค. ์ต์ข ์๊ฐ๋ณต์ก๋๋ sorted()์ O(nlogn)์ผ๋ก ์ฝ๋ ์์ฑ!
โ 1269 ๋์นญ ์ฐจ์งํฉ โ
import sys
input=sys.stdin.readline
input()
print(len(set(map(int,input().split()))^set(map(int,input().split()))))
๐ฝ ๋์นญ ์ฐจ์งํฉ ^๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ฉด ๋!
โ 14425 ๋ฌธ์์ด ์งํฉ โ
import sys
input = sys.stdin.readline
N,M=map(int,input().split())
S=set()
for _ in range(N):
S.add(input())
ans=0
for _ in range(M):
if input() in S: ans += 1
print(ans)
โ 11478 ์๋ก ๋ค๋ฅธ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฐ์ โ
S=input()
ans=set()
for l in range(1,len(S)+1):
for i in range(len(S)-l+1):
ans.add(S[i:i+l])
print(len(ans))
๐ฝ ์งํฉ์ add()๋ก ๋ถ๋ถ์ ์ธ ์ฐ์ ๋ฌธ์์ด์ ๋ฃ์ด์, ์๋์ ์ผ๋ก ์๋ก ๋ค๋ฅธ(์ค๋ณต์ ํ์ฉํ์ง ์๋) ์งํฉ์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ฉด ๋! ์๋ก ๋ค๋ฅด๋ค๋ ์ฑ์ง์ ์งํฉ์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ์ฐ๊ฒฐํด์ ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ธ ์ฝ๋๋ก ํด๊ฒฐํ ์ ์๋ค.
โ 25325 ํ์ ์ธ๊ธฐ๋ ์ธก์ โ
import sys
input=sys.stdin.readline
n,d=int(input()),dict()
for i in input().split():d[i]=0
for i in range(n):
for j in input().split():d[j]+=1
for x in sorted(d.items(),key=lambda x:(-x[1],x[0])):print(*x)
๐ฝ ์ธ๊ธฐ๋์ ์ด๋ฆ์ด๋ผ๋ ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ํ์ฉํด ํจ์จ์ ์ธ ์๋ฃ๊ตฌ์กฐ dictionary๋ฅผ ๋ง๋ค๊ณ dictionary sorting์ผ๋ก ํ ๋ฒ์ ์ ๋ต ์ถ๋ ฅ!
โ 9612 Maximum Word Frequency โ
import sys
input=sys.stdin.readline
tf_idf=dict()
for _ in range(int(input())):
w=input().strip()
if w in tf_idf: tf_idf[w] += 1
else: tf_idf[w] = 1
print(*sorted(tf_idf.items(),key=lambda item:(item[1],item[0]),reverse=True)[0])
๐ฝ ๋จ์ด์ ๋น๋์ ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ dictionary ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ , value๊ฐ ์ ์ผ ํฐ ๊ฒ์ด ์ค๊ณ , value๊ฐ ๊ฐ๋ค๋ฉด ์ฌ์ ์ ๋ค์ ๋จ์ด๊ฐ ๋จผ์ ๋์ค๊ฒ ํ๊ธฐ ์ํด์๋ ๋จผ์ value sortํ๊ณ , key sortํ ๋ค reverseํ๋ฉด ๋๋ค! (key sort๋ lexicographical order์ด๋ฏ๋ก reverseํ๋ฉด ๋จ) dictionary sort code์์ (item[1], item[0])์ผ๋ก ์ค์ ํ๊ณ reverse=True
โ 11645 I've Been Everywhere, Man โ
import sys
input=sys.stdin.readline
for _ in range(int(input())):
city=set()
for _ in range(int(input())):
city.add(input().rstrip())
print(len(city))
๐ฝ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ set()์ add()๋ก update ํ distinct city ๊ฐ์ len(set) ์ถ๋ ฅ
โ 26069 ๋ถ์์ฑ ์ข์ ์ด์ด์ด โ
import sys
input=sys.stdin.readline
dancing=set()
dance_start=False
for _ in range(int(input())):
x,y=input().rstrip().split()
if 'ChongChong' in [x,y]:
dance_start=True
dancing.add(x)
dancing.add(y)
continue
if dance_start:
if x in dancing or y in dancing:
dancing.update([x,y])
print(len(dancing))
๐ฝ ์ด์ด์ด๋ฅผ ๋ฐ๊ฒฌํ ๋ค๋ถํฐ set()์ ์๋ ์บ๋ฆญํฐ๊ฐ ์๋ค๋ฉด update ํด ์ค๋ณต ์์ด ์ถ๋ ์บ๋ฆญํฐ์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ. set()์์ in ์ฐ์ฐ์ O(1)
โ 10184 Coupon2 โ
import sys
input=sys.stdin.readline
for _ in range(int(input())):
products=dict()
invalid=[]
X,Y=map(int,input().split())
for _ in range(X):
product_id,product_price=input().rstrip().split()
products[product_id] = float(product_price)
for _ in range(Y):
product_id,discount=input().rstrip().split()
discount=float(discount)
if product_id not in products.keys():
invalid.append(product_id)
else:
products[product_id]*=(1-discount)
print(f'{sum(products.values()):.2f}')
if invalid:
print('INVALID COUPONS')
for x in invalid:
print(x)
โ 25192 ์ธ์ฌ์ฑ ๋ฐ์ ๊ณฐ๊ณฐ์ด โ
import sys
input=sys.stdin.readline
N=int(input())
s=set()
l=[input().rstrip() for _ in range(N)]
ans=0
for person in l:
if person=='ENTER':
ans+=len(s)
s.clear()
else:
s.add(person)
print(ans+len(s))
๐ฝ ์ด๋ฆ ์ค๋ณต ์์ด ์ ์ฅํ ์ ์ ์ ์๋ฅผ ์นด์ดํธํด์ผํ๋ฏ๋ก set() ํ์ฉ
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ BFS&DFS Intermediate I - 20 Solvedโ (0) | 2023.02.17 |
---|---|
โ Combinatorics Intermediate I - 5 Solvedโ (1) | 2023.02.16 |
โ Binary Search Upper-Intermediate I - 6 Solvedโ (0) | 2023.02.09 |
โ Greedy Upper-Intermediate I - 9 Solvedโ (0) | 2023.01.27 |
โ Math & Geometry Upper-Intermediate I - 6 Solvedโ (0) | 2023.01.26 |
๋๊ธ