[λ°±μ€/Python] 1501. μμ΄ μ½κΈ°
λ¬Έμ
https://www.acmicpc.net/problem/1501
1501λ²: μμ΄ μ½κΈ°
첫째 μ€μ μ¬μ μ μλ λ¨μ΄λ€μ κ°μ N(0 ≤ N ≤ 10,000)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ κ° μ€μ νλμ©, μμ΄ μ¬μ μ μλ λ¨μ΄λ€μ΄ μ£Όμ΄μ§λ€. κ° λ¨μ΄μ κΈΈμ΄λ 100μλ₯Ό λμ§ μλλ€. λ€μ μ€μ
www.acmicpc.net
νμ΄
λ¬Έμ₯μ ν΄μν μ μλ κ²½μ°μ μλ₯Ό ꡬν΄μΌ νλ€.
λ¬Έμ₯μ 곡백μ κΈ°μ€μΌλ‘ μλΌμ λ¨μ΄λ€λ‘ λ§λ€μλ€.
κ° λ¨μ΄λ€μ 맨 μκ³Ό 맨 λ· κΈμλ₯Ό μ μΈνκ³ μμλ₯Ό λ°κΎΈμ΄ λ€μν κ²½μ°μ μλ₯Ό λ§λ€ μ μλ€.
μ΄ κ²½μ°μ μ μ€μ μ¬μ μμ μ°Ύμ μ μλ κ²½μ°μ μκ° νμνλ€.
μ€κ°μ ν·κ°λ Έλ μ μ,
μ΄λ€ λ¬Έμ₯μ΄ 3κ°μ λ¨μ΄λ‘ ꡬμ±λμ΄ μκ³ , κ°κ° 2κ°μ§, 0κ°μ§, 3κ°μ§λ‘ ν΄μλ μ μλ κ²½μ°μ
2*0*3 = 0μ΄ μλλΌ, 0μ μλ μ μΉκ³ 2*3 = 6μ΄ λ΅μ΄ λλ€λ κ²μ΄μλ€.
μλ£κ΅¬μ‘°λ‘ dictλ₯Ό μ΄μ©νμλλ°, keyλ₯Ό "(맨μκΈμ)(맨λ·κΈμ)(κ°μ΄λ°λ¬Έμλ€μ λ ¬)"λ‘ μ΄μ©νμλ€.
μλ₯Όλ€μ΄ "befakdf" λ "bfadefk"κ° λλ€.
λ°λΌμ, μ¬μ μ "abec"μ "aebc"κ° μλ€λ©΄ μ΄ λμ keyλ κ°λ€.
κ·Έλμ valueλ ν΄λΉ keyκ° λ±μ₯ν νμλ₯Ό λ£μ΄μ£Όμλ€.
μ¬μ μ λͺ¨λ λ§λ νμ
λ¬Έμ₯μ μλ λ¨μ΄λ€μ dictμμ keyλ₯Ό λ§λ λ°©λ²κ³Ό λμΌνκ² λ§λ€μ΄μ, μ¬μ μμ valueλ₯Ό μ‘°νν λ€ valueκ° 0μ΄ μλ κ²½μ°μλ§ κ³±ν΄μ£Όμλ€.
* μμμ keyλ₯Ό λ§λλ λ°©λ²μμ, 1κΈμμ 2κΈμμ§λ¦¬λ ifλ‘ κ²μ¬ν΄μ λ°λ‘ keyλ₯Ό λ§λ€μ΄μ£Όμλ€.
μ½λ
from collections import defaultdict
dic = defaultdict(dict)
N = int(input())
for i in range(N):
word = input()
if (len(word) <= 2):
try : dic[word]['']+=1
except : dic[word]['']=1
else:
first_k = word[0]+word[-1]
sec_k = str(sorted(word[1:-1]))
try : dic[first_k][sec_k]+=1
except : dic[first_k][sec_k]=1
M = int(input())
for i in range(M):
sen = input().split(' ')
count = 1
isCan = False
for idx, w in enumerate(sen):
temp = 0
if (len(w) <= 2):
try :temp += dic[w]['']
except: temp
else:
start = w[0]
end = w[-1]
middle = str(sorted(w[1:-1]))
try: temp+= dic[start+end][middle]
except: temp
if temp != 0:
count*=temp
isCan = True
if not isCan:
count = 0
print(count)
pythonμΌλ‘ μ΄λ €μ΄ λ¬Έμ λ₯Ό νΈλ κ²μ΄ μ²μμ΄λΌ μκ³ λ¦¬μ¦μ ꡬννλ λΆλΆμ κ΅μ₯ν ν€λ§Έλ€.