728x90
๋ฐ์ํ
๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/17677
๋ฌธ์ ํ์ด
1. makeJ ํจ์
def makeJ(str):
alphabet = ['Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M']
strArr = []
for i in range(1, len(str)):
if str[i-1] in alphabet and str[i] in alphabet:
strArr.append(str[i-1]+str[i])
return strArr
- makeJ ํจ์๋ ์ ๋ ฅ๋ ๋ฌธ์์ด์์ ๋ ๊ธ์์ฉ ๋์ด ๋ค์ค์งํฉ์ ๋ง๋ญ๋๋ค. ๋จ, ๋ ๊ธ์๊ฐ ๋ชจ๋ ์๋ฌธ์์ผ ๊ฒฝ์ฐ์๋ง ๋ค์ค์งํฉ์ ์ถ๊ฐ๋ฉ๋๋ค.
- alphabet ๋ฆฌ์คํธ๋ ๋๋ฌธ์ ์ํ๋ฒณ์ ์ ์ฅํ ๋ฆฌ์คํธ๋ก, ๋ ๊ธ์๊ฐ ๋ชจ๋ ์ด ๋ฆฌ์คํธ์ ์ํ๋์ง ํ์ธํฉ๋๋ค.
- ๋ฌธ์์ด์ ๋ ๊ธ์์ฉ ์๋ผ์ ๋ค์ค์งํฉ strArr์ ์ถ๊ฐํ๋๋ฐ, ์ฌ๊ธฐ์๋ str[i-1] ๊ณผ str[i]๋ก ๋ ๊ธ์๋ฅผ ์กฐํฉํ ํ ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค.
2. ๋๋ฌธ์ ๋ณํ ๋ฐ ๋ค์ค์งํฉ ์์ฑ
def solution(str1, str2):
answer = 0
# ๋๋ฌธ์๋ก ๋ง์ถ๊ณ ๋ค์ค์งํฉ ์์ฑ
str1Arr = makeJ(str1.upper())
str2Arr = makeJ(str2.upper())
- ์ ๋ ฅ๋ ๋ ๋ฌธ์์ด str1 ๊ณผ str2๋ฅผ ๋๋ฌธ์๋ก ๋ณํํ์ฌ makeJ ํจ์๋ฅผ ํตํด ๊ฐ๊ฐ์ ๋ค์ค์งํฉ์ ๋ง๋ญ๋๋ค.
- str1Arr์ str2Arr๋ ๊ฐ๊ฐ์ ๋ค์ค์งํฉ์ ์ ์ฅํ๋ ๋ฆฌ์คํธ์ ๋๋ค.
3. ๊ต์งํฉ ๋ฐ ํฉ์งํฉ ๊ณ์ฐ
a = [] # ๊ต์งํฉ
b = [] # ํฉ์งํฉ
# ๊ต์งํฉ ๊ตฌํ๊ธฐ
for i in str1Arr:
if i in str2Arr and i not in a:
minStrLen = min(str1Arr.count(i), str2Arr.count(i))
for j in range(minStrLen):
a.append(i)
# ํฉ์งํฉ์์ ์ธ max ๋ฒ์
maxStrLen = max(str1Arr.count(i), str2Arr.count(i))
for j in range(maxStrLen):
b.append(i)
- a: ๊ต์งํฉ์ ์ ์ฅํ๋ ๋ฆฌ์คํธ
- b: ํฉ์งํฉ์ ์ ์ฅํ๋ ๋ฆฌ์คํธ
- ๊ต์งํฉ ๊ตฌํ๊ธฐ:
- str1Arr์ ์๋ ์์ ์ค str2Arr์๋ ์กด์ฌํ๋ ์์๋ฅผ ์ฐพ์ต๋๋ค.
- ํด๋น ์์๊ฐ ์ด๋ฏธ a(๊ต์งํฉ) ๋ฆฌ์คํธ์ ์๋ค๋ฉด, ๊ทธ ์์์ ์ต์ ๋ฑ์ฅ ํ์๋งํผ a๋ฆฌ์คํธ์ ์ถ๊ฐํฉ๋๋ค.
- ํฉ์งํฉ์์ ์ธ ์ ์๋๋ก ๊ทธ ์์์ ์ต๋ ๋ฑ์ฅ ํ์ ๋งํผ b๋ฆฌ์คํธ์ ์ถ๊ฐํฉ๋๋ค.
- ๋๋จธ์ง ํฉ์งํฉ ์์ ์ถ๊ฐ
# ํฉ์งํฉ ๊ตฌํ๊ธฐ
for i in str1Arr:
if i not in a:
b.append(i)
for i in str2Arr:
if i not in a:
b.append(i)
- ๊ต์งํฉ์ ์๋ ์์๋ฅผ str1Arr๊ณผ str2Arr์์ ์ฐพ์์ b(ํฉ์งํฉ)์ ์ถ๊ฐํฉ๋๋ค.
4. ์์นด๋ ์ ์ฌ๋ ๊ณ์ฐ ๋ฐ ๋ณํ
if len(a) == 0 and len(b) == 0:
answer = 1
else:
answer = len(a)/len(b)
answer = int(answer*65536)
return answer
- ๊ต์งํฉ๊ณผ ํฉ์งํฉ์ด ๋ชจ๋ ๋น์ด ์๋ ๊ฒฝ์ฐ(๋ ๋ค์ค์งํฉ์ด ๊ณต์งํฉ), ์ ์ฌ๋๋ 1๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ทธ๋ ์ง ์๋ค๋ฉด, ๊ต์งํฉ ํฌ๊ธฐ / ํฉ์งํฉ ํฌ๊ธฐ๋ก ์์นด๋ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ ์ฌ๋์ 65536์ ๊ณฑํ ํ, ์์์ ์๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ ์๋ก ๋ฐํํฉ๋๋ค.
์ต์ข ์ ๋ต ์ฝ๋
def makeJ(str):
alphabet = ['Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M']
strArr = []
for i in range(1, len(str)):
if str[i-1] in alphabet and str[i] in alphabet:
strArr.append(str[i-1]+str[i])
return strArr
def solution(str1, str2):
answer = 0
# ๋๋ฌธ์๋ก ๋ง์ถ๊ณ ๋ค์ค์งํฉ ์์ฑ
str1Arr = makeJ(str1.upper())
str2Arr = makeJ(str2.upper())
a = [] # ๊ต์งํฉ
b = [] # ํฉ์งํฉ
# ๊ต์งํฉ ๊ตฌํ๊ธฐ
for i in str1Arr:
if i in str2Arr and i not in a:
minStrLen = min(str1Arr.count(i), str2Arr.count(i))
for j in range(minStrLen):
a.append(i)
# ํฉ์งํฉ์์ ์ธ max ๋ฒ์
maxStrLen = max(str1Arr.count(i), str2Arr.count(i))
for j in range(maxStrLen):
b.append(i)
# ํฉ์งํฉ ๊ตฌํ๊ธฐ
for i in str1Arr:
if i not in a:
b.append(i)
for i in str2Arr:
if i not in a:
b.append(i)
if len(a) == 0 and len(b) == 0:
answer = 1
else:
answer = len(a)/len(b)
answer = int(answer*65536)
return answer
728x90
๋ฐ์ํ