โ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/17677
๋ฉ๋ชจ๋ฆฌ: 9.23 MB, ์๊ฐ: 1.39 ms
์ฝ๋ฉํ ์คํธโ ์ฐ์ต > 2018โ KAKAOโ BLINDโ RECRUITMENT
์ฌ๋ฌ ์ธ๋ก ์ฌ์์ ์์์ง๋ ๋ด์ค, ํนํ ์๋ณด์ฑ ๋ด์ค๋ฅผ ๋ณด๋ฉด ๋น์ท๋น์ทํ ์ ๋ชฉ์ ๊ธฐ์ฌ๊ฐ ๋ง์ ์ ์ ํ์ํ ๊ธฐ์ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค. Daum ๋ด์ค์ ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋ ์ ์ ์ฌ์ ํ๋ธ๋ ์ฌ์ฉ์๋ค์ด ํธ๋ฆฌํ๊ฒ ๋ค์ํ ๋ด์ค๋ฅผ ์ฐพ์๋ณผ ์ ์๋๋ก ๋ฌธ์ ์ ์ ๊ฐ์ ํ๋ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค.
๊ฐ๋ฐ์ ๋ฐฉํฅ์ ์ก๊ธฐ ์ํด ํ๋ธ๋ ์ฐ์ ์ต๊ทผ ํ์ ๊ฐ ๋๊ณ ์๋ "์นด์นด์ค ์ ์ ๊ฐ๋ฐ์ ๊ณต์ฑ" ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํด๋ณด์๋ค.
- ์นด์นด์ค ์ฒซ ๊ณต์ฑ..'๋ธ๋ผ์ธ๋' ๋ฐฉ์ ์ฑ์ฉ
- ์นด์นด์ค, ํฉ๋ณ ํ ์ฒซ ๊ณต์ฑ.. ๋ธ๋ผ์ธ๋ ์ ํ์ผ๋ก ๊ฐ๋ฐ์ ์ฑ์ฉ
- ์นด์นด์ค, ๋ธ๋ผ์ธ๋ ์ ํ์ผ๋ก ์ ์ ๊ฐ๋ฐ์ ๊ณต์ฑ
- ์นด์นด์ค ๊ณต์ฑ, ์ ์ ๊ฐ๋ฐ์ ์ฝ๋ฉ ๋ฅ๋ ฅ๋ง ๋ณธ๋ค
- ์นด์นด์ค, ์ ์ ๊ณต์ฑ.. "์ฝ๋ฉ ์ค๋ ฅ๋ง ๋ณธ๋ค"
- ์นด์นด์ค "์ฝ๋ฉ ๋ฅ๋ ฅ๋ง์ผ๋ก 2018 ์ ์ ๊ฐ๋ฐ์ ๋ฝ๋๋ค"
๊ธฐ์ฌ์ ์ ๋ชฉ์ ๊ธฐ์ค์ผ๋ก "๋ธ๋ผ์ธ๋ ์ ํ"์ ์ฃผ๋ชฉํ๋ ๊ธฐ์ฌ์ "์ฝ๋ฉ ํ ์คํธ"์ ์ฃผ๋ชฉํ๋ ๊ธฐ์ฌ๋ก ๋๋๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค. ํ๋ธ๋ ์ด๋ค์ ๊ฐ๊ฐ ๋ฌถ์ด์ ๋ณด์ฌ์ฃผ๋ฉด ์นด์นด์ค ๊ณต์ฑ ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ์ฐพ์๋ณด๋ ์ฌ์ฉ์์๊ฒ ์ ์ฉํ ๋ฏ์ถ์๋ค.
์ ์ฌํ ๊ธฐ์ฌ๋ฅผ ๋ฌถ๋ ๊ธฐ์ค์ ์ ํ๊ธฐ ์ํด์ ๋ ผ๋ฌธ๊ณผ ์๋ฃ๋ฅผ ์กฐ์ฌํ๋ ํ๋ธ๋ "์์นด๋ ์ ์ฌ๋"๋ผ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋๋ค.
์์นด๋ ์ ์ฌ๋๋ ์งํฉ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ฒ์ฌํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก ์๋ ค์ ธ ์๋ค. ๋ ์งํฉ A, B ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J(A, B)๋ ๋ ์งํฉ์ ๊ต์งํฉ ํฌ๊ธฐ๋ฅผ ๋ ์งํฉ์ ํฉ์งํฉ ํฌ๊ธฐ๋ก ๋๋ ๊ฐ์ผ๋ก ์ ์๋๋ค.
์๋ฅผ ๋ค์ด ์งํฉ A = {1, 2, 3}, ์งํฉ B = {2, 3, 4}๋ผ๊ณ ํ ๋, ๊ต์งํฉ A ∩ B = {2, 3}, ํฉ์งํฉ A ∪ B = {1, 2, 3, 4}์ด ๋๋ฏ๋ก, ์งํฉ A, B ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J(A, B) = 2/4 = 0.5๊ฐ ๋๋ค. ์งํฉ A์ ์งํฉ B๊ฐ ๋ชจ๋ ๊ณต์งํฉ์ผ ๊ฒฝ์ฐ์๋ ๋๋์ ์ด ์ ์๋์ง ์์ผ๋ ๋ฐ๋ก J(A, B) = 1๋ก ์ ์ํ๋ค.
์์นด๋ ์ ์ฌ๋๋ ์์์ ์ค๋ณต์ ํ์ฉํ๋ ๋ค์ค์งํฉ์ ๋ํด์ ํ์ฅํ ์ ์๋ค. ๋ค์ค์งํฉ A๋ ์์ "1"์ 3๊ฐ ๊ฐ์ง๊ณ ์๊ณ , ๋ค์ค์งํฉ B๋ ์์ "1"์ 5๊ฐ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ์. ์ด ๋ค์ค์งํฉ์ ๊ต์งํฉ A ∩ B๋ ์์ "1"์ min(3, 5)์ธ 3๊ฐ, ํฉ์งํฉ A ∪ B๋ ์์ "1"์ max(3, 5)์ธ 5๊ฐ ๊ฐ์ง๊ฒ ๋๋ค. ๋ค์ค์งํฉ A = {1, 1, 2, 2, 3}, ๋ค์ค์งํฉ B = {1, 2, 2, 4, 5}๋ผ๊ณ ํ๋ฉด, ๊ต์งํฉ A ∩ B = {1, 2, 2}, ํฉ์งํฉ A ∪ B = {1, 1, 2, 2, 3, 4, 5}๊ฐ ๋๋ฏ๋ก, ์์นด๋ ์ ์ฌ๋ J(A, B) = 3/7, ์ฝ 0.42๊ฐ ๋๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋๋ฐ ์ด์ฉํ ์ ์๋ค. ๋ฌธ์์ด "FRANCE"์ "FRENCH"๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ๋ ๊ธ์์ฉ ๋์ด์ ๋ค์ค์งํฉ์ ๋ง๋ค ์ ์๋ค. ๊ฐ๊ฐ {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}๊ฐ ๋๋ฉฐ, ๊ต์งํฉ์ {FR, NC}, ํฉ์งํฉ์ {FR, RA, AN, NC, CE, RE, EN, CH}๊ฐ ๋๋ฏ๋ก, ๋ ๋ฌธ์์ด ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J("FRANCE", "FRENCH") = 2/8 = 0.25๊ฐ ๋๋ค.
- ์ ๋ ฅ์ผ๋ก๋ str1๊ณผ str2์ ๋ ๋ฌธ์์ด์ด ๋ค์ด์จ๋ค. ๊ฐ ๋ฌธ์์ด์ ๊ธธ์ด๋ 2 ์ด์, 1,000 ์ดํ์ด๋ค.
- ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ฌธ์์ด์ ๋ ๊ธ์์ฉ ๋์ด์ ๋ค์ค์งํฉ์ ์์๋ก ๋ง๋ ๋ค. ์ด๋ ์๋ฌธ์๋ก ๋ ๊ธ์ ์๋ง ์ ํจํ๊ณ , ๊ธฐํ ๊ณต๋ฐฑ์ด๋ ์ซ์, ํน์ ๋ฌธ์๊ฐ ๋ค์ด์๋ ๊ฒฝ์ฐ๋ ๊ทธ ๊ธ์ ์์ ๋ฒ๋ฆฐ๋ค. ์๋ฅผ ๋ค์ด "ab+"๊ฐ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ฉด, "ab"๋ง ๋ค์ค์งํฉ์ ์์๋ก ์ผ๊ณ , "b+"๋ ๋ฒ๋ฆฐ๋ค.
- ๋ค์ค์งํฉ ์์ ์ฌ์ด๋ฅผ ๋น๊ตํ ๋, ๋๋ฌธ์์ ์๋ฌธ์์ ์ฐจ์ด๋ ๋ฌด์ํ๋ค. "AB"์ "Ab", "ab"๋ ๊ฐ์ ์์๋ก ์ทจ๊ธํ๋ค.
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ ๋ฌธ์์ด์ ์์นด๋ ์ ์ฌ๋๋ฅผ ์ถ๋ ฅํ๋ค. ์ ์ฌ๋ ๊ฐ์ 0์์ 1 ์ฌ์ด์ ์ค์์ด๋ฏ๋ก, ์ด๋ฅผ ๋ค๋ฃจ๊ธฐ ์ฝ๋๋ก 65536์ ๊ณฑํ ํ์ ์์์ ์๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ ์๋ถ๋ง ์ถ๋ ฅํ๋ค.
์์ ์ ์ถ๋ ฅ
| str1 | str2 | answer |
| FRANCE | french | 16384 |
| handshake | shake hands | 65536 |
| aa1+aa2 | AAAA12 | 43690 |
| E=M*C^2 | e=m*c^2 | 65536 |
โ๐ปํ์ด
๋ฌธ์ ์์ ๋ฌธ์์ด์ ๋๊ธ์์ฉ ๋์ด์ ๋ค์ค์งํฉ ์์๋ก ๋ง๋ ๋ค๊ณ ํ์ฌ ์ฐ์ _str1๊ณผ _str2๋ก ๋ค์ค์งํฉ ์์๋ฅผ ๋ง๋ ๋ค. ์ด๋ ์ซ์, ํน์๊ธฐํธ, ๊ณต๋ฐฑ๊ณผ ๊ฐ์ด ๋ฌถ์ธ ๋ฌธ์๋ ์ ์ธํ๋ฏ๋ก isalpha()๋ฅผ ์ฌ์ฉํด ์ํ๋ฒณ์ผ๋ก๋ง ๊ตฌ์ฑ๋ ์์๋ก ๋ค์ค์งํฉ ์์๋ฅผ ๋ง๋ ๋ค.
์ฌ๊ธฐ์ ๋ค์ค์งํฉ ์์๋ฅผ ๋ง๋ ํ ํ์ธํ์ ๋ ๋ ์งํฉ ๋ชจ๋ ๊ณต์งํฉ์ด๋ผ๋ฉด J(A, B) = 1๋ก ๋ฐ๋ก return 65536์ ํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ ๋๋จธ์ง ๊ฒฝ์ฐ๋ ๊ต์งํฉ๊ณผ ํฉ์งํฉ์ ๊ตฌํด์ ํ๋ฉด ๋๋ค. Counter๋ฅผ ์ด์ฉํด ๊ต์งํฉ๊ณผ ํฉ์งํฉ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์ ์ผ ๊ฐ๋จํ๊ธด ํ์ง๋ง ๋๋ ๊ต์งํฉ์ ์ง์ ๊ณ์ฐํ์์ผ๋ฏ๋ก ์ด์ ๋ํ ํ์ด๋ฅผ ํ๊ฒ ๋ค.
ํฉ์งํฉ์ ๊ฒฝ์ฐ ๊ณ ๋ฑํ๊ต ํํต ๋ ๋ฐฐ์ ๋ ๋ ์งํฉ์ ํฉ์ ๊ฐ ์งํฉ์ ํฉ์์ ๊ต์งํฉ์ ๋บ ๊ฒ๊ณผ ๊ฐ๋ค๋ ์๋ฆฌ๋ฅผ ์ด์ฉํด์ ๊ณ์ฐํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ต์งํฉ๋ง ๊ตฌํ๋ฉด ๋๋ค. ๊ต์งํฉ์ ๋ ์งํฉ์ ๋น๊ตํด์ ์๋ค๋ฉด _str์์ ์ ๊ฑฐํ๊ณ ๊ต์งํฉ ์์๋ง ๋ด๋ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ต์งํฉ์ ์์์ ๊ฐ์๋ฅผ ๋ ์งํฉ์ ์์์ ๊ฐ์ ํฉ์์ ๋นผ๋ฉด ํฉ์งํฉ์ ์์์ ๊ฐ์๊ฐ ๋์จ๋ค. ๋ง์ง๋ง์ผ๋ก ๊ต์งํฉ์ ์์์ ๊ฐ์/ํฉ์กํฉ์ ์์์ ๊ฐ์*65536์ ํ๊ณ int()๋ฅผ ์์์ ์ ์๋ถ๋ถ๋ง ๋ฐํํ๋ฉด ๋๋ค.
๐ป์ฝ๋
๋ฆฌ์คํธ๋ก ์ง์ ๊ต์งํฉ ๊ณ์ฐ
def solution(str1, str2):
_str1 = [str1[i:i+2].lower() for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
_str2 = [str2[i:i+2].lower() for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
if len(_str1) == 0 and len(_str2) == 0:
return 65536
union = len(_str1) + len(_str2)
inter = [] # ๊ต์งํฉ
if len(_str1) > len(_str2):
_str = _str2.copy()
for s in _str1:
if s in _str:
_str.remove(s)
inter.append(s)
else:
_str = _str1.copy()
for s in _str2:
if s in _str:
_str.remove(s)
inter.append(s)
answer = int(len(inter)/(union-len(inter))*65536)
return answer
Counter ์ด์ฉํด์ ๊ต์งํฉ๊ณผ ํฉ์งํฉ ๊ณ์ฐ
from collections import Counter
def solution(str1, str2):
_str1 = [str1[i:i+2].lower() for i in range(len(str1)-1) if str1[i:i+2].isalpha()]
_str2 = [str2[i:i+2].lower() for i in range(len(str2)-1) if str2[i:i+2].isalpha()]
if not _str1 and not _str2:
return 65536
c1, c2 = Counter(_str1), Counter(_str2)
union = sum((c1|c2).values())
inter = sum((c1&c2).values())
return int(inter/union*65536)
๐ํ๊ธฐ

๋ ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ ์ฝ์๋ค...๋๊ธ์์ฉ ๋์ผ๋ผ๊ณ ํ๋๋ฐ ํ๊ธ์์ฉ ๋์ด์ ํ๊ณ ์๊ณ ์ฐธ...๐คฆ๐ปโ๏ธ๊ทธ๋ฆฌ๊ณ Counter๋ก ๋ค์ ํ์์ ๋ ์ฒ์์๋ ๋ถํ์ํ๊ฒ Counter๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํด์ ์๊ฐ์ ๋ง์ด ์ ์ค์๋๋ฐ ์ ์ธํ ๋ค์์ ์ฌ์ฌ์ฉํ๋ ์์ผ๋ก ๋ฐ๊ฟจ๋๋ ํ์คํ ๋ง์ด ์ค์ด๋ ๊ฒ ๊ฐ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์/Python - Lv.2 (0) | 2025.10.09 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] ํํ/Python - Lv.2 (0) | 2025.10.07 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋น๋ฐ์ง๋/Python - Lv.1 (0) | 2025.10.01 |
| [๋ฐฑ์ค] 2075. N๋ฒ์งธ ํฐ ์/Python - Silver3 (0) | 2025.09.23 |
| [๋ฐฑ์ค] 20040. ์ฌ์ดํด ๊ฒ์/Python - Gold4 (0) | 2025.09.10 |