BOJ/๐Ÿฅˆ

โ˜…Set/Map Intermediate I - 13 Solvedโ˜…

metamong 2023. 2. 15.

โ˜… 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)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€