๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/17677
๋ฌธ์ ์ค๋ช
๋ ์งํฉ A, B ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J(A, B)๋ ๋ ์งํฉ์ ๊ต์งํฉ ํฌ๊ธฐ๋ฅผ ๋ ์งํฉ์ ํฉ์งํฉ ํฌ๊ธฐ๋ก ๋๋ ๊ฐ์ผ๋ก ์ ์๋๋ค.
(ํฉ์งํฉ์ ํฌ๊ธฐ) = (A์ ํฌ๊ธฐ + B์ ํฌ๊ธฐ - ๊ต์งํฉ์ ํฌ๊ธฐ) ์์ด ๋ง์กฑํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ์์นด๋ ์ ์ฌ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ์ ์๋ค.
J(A, B) = (๊ต์งํฉ์ ํฌ๊ธฐ) / (A์ ํฌ๊ธฐ + B์ ํฌ๊ธฐ - ๊ต์งํฉ์ ํฌ๊ธฐ)
์ฆ, ๊ต์งํฉ์ ํฌ๊ธฐ๋ง ๊ตฌํ๋ฉด ๋ต์ ๊ตฌํ ์ ์๋ค.
๋ค์ค์งํฉ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฌธ์์ด์ ๋ฆฌ์คํธ๋ก ๋ณํํด์ ์ ์ฅํ๋ค. ๋ณํ ๊ณผ์ ์์ ์๋ฌธ์์ ๊ฒฝ์ฐ ๋ชจ๋ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ ์ ์ฅํ๋ค. (๋๋ฌธ์์ ์๋ฌธ์๋ฅผ ๊ฐ์ ๋ฌธ์๋ก ์ทจ๊ธํ๊ธฐ ์ํจ)
์ฃผ์ํ ์ ์ A, B๊ฐ ๋ชจ๋ ๊ณต์งํฉ์ธ ๊ฒฝ์ฐ J(A, B)๋ฅผ 1๋ก ๋ฌธ์ ์์ ์ ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ์งํฉ์ ๊ต์งํฉ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ ์์ฑํด์ ์์นด๋ ์ ์ฌ๋๋ฅผ ๊ตฌํ๊ณ 65536์ ๊ณฑํด์ ๋ฐํํ๋ค. ๊ต์งํฉ ํฌ๊ธฐ๋ ๋ ๋ค์ค์งํฉ A, B ์ค์์ ๋ ํฌ๊ธฐ๊ฐ ์์ ๊ฒ์ ์งํฉ์ผ๋ก ๋๊ณ (์ค๋ณต์ฑ์ ์ ๊ฑฐํ๊ณ ) ๊ต์งํฉ์ ์ฐพ์๋ค. ์ด๋ค ์์ x๊ฐ A์ B์ ๋ชจ๋ ์ํ๋ ๊ฒฝ์ฐ A, B์์ x๊ฐ ๋ ์ ๊ฒ ํฌํจ๋ ์๋ฅผ ๊ต์งํฉ ํฌ๊ธฐ์ ๋ํ๋ค.
์์ค์ฝ๋
def numIntersection(A, B):
n = 0 # A์ B์ ๊ต์งํฉ ์์ ๊ฐ์
# A์ ์์ ๊ฐ์ <= B์ ์์ ๊ฐ์
for x in set(A):
if x in B: # x๊ฐ A์ B ๋ชจ๋์ ์ํ๋ ๊ฒฝ์ฐ
n += min(A.count(x), B.count(x))
return n;
def solution(str1, str2):
answer = 0
# ๋ชจ๋ ๋ฌธ์์ด์ ์๋ฌธ์๋ก ๋ฐ๊พธ๊ณ ๋ค์ค์งํฉ ์์ฑ
str1 = str1.lower()
str2 = str2.lower()
A, B = [], []
for i in range(len(str1) - 1):
# ์๋ฌธ์์ธ ๊ฒฝ์ฐ์๋ง ๋ค์ค์งํฉ์ ์์๋ก ํฌํจ
if str1[i].isalpha() and str1[i + 1].isalpha():
A.append(str1[i] + str1[i + 1])
for i in range(len(str2) - 1):
if str2[i].isalpha() and str2[i + 1].isalpha():
B.append(str2[i] + str2[i + 1])
# A, B ๋ชจ๋๊ฐ ๊ณต์งํฉ์ธ ๊ฒฝ์ฐ ์์นด๋ ์ ์ฌ๋๋ 1
if (not A) and (not B): return 65536
# ๊ต์งํฉ ์์์ ๊ฐ์ ๊ตฌํ๊ธฐ
n = numIntersection(A, B) if len(A) < len(B) else numIntersection(B, A)
answer = n / (len(A) + len(B) - n)
return int(answer*65536)