์ฝ๋ฉ ํ ์คํธ ์ฐ์ต - 2018 KAKAO BLIND RECRUITMENT
<[1์ฐจ] ๋ด์ค ํด๋ฌ์คํฐ๋ง>
๋ฌธ์ ์ค๋ช
์ฌ๋ฌ ์ธ๋ก ์ฌ์์ ์์์ง๋ ๋ด์ค, ํนํ ์๋ณด์ฑ ๋ด์ค๋ฅผ ๋ณด๋ฉด ๋น์ท๋น์ทํ ์ ๋ชฉ์ ๊ธฐ์ฌ๊ฐ ๋ง์ ์ ์ ํ์ํ ๊ธฐ์ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค. 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์ ๊ณฑํ ํ์ ์์์ ์๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ ์๋ถ๋ง ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import math
def solution(str1, str2):
answer = 0
A=[]
B=[]
x=[]
minus=[]
#str1, str2 ๋ ๊ธ์์ฉ ๋์ด์ list
for i in range(len(str1)-1):
if(str1[i].isalpha() and str1[i+1].isalpha()):
A.append(str1[i].lower()+""+str1[i+1].lower())
for i in range(len(str2)-1):
if(str2[i].isalpha() and str2[i+1].isalpha()):
B.append(str2[i].lower()+""+str2[i+1].lower())
x.append(str2[i].lower()+""+str2[i+1].lower())
for i in A: #๊ต์งํฉ
if(i in x):
minus.append(i)
x.pop(x.index(i))
sumlist=[]
for i in A: #ํฉ์งํฉ
sumlist.append(i)
if(i in B):
B.pop(B.index(i))
sumlist=sumlist+B
if(len(minus)==0 and len(sumlist)==0): #๋ชจ๋ ๊ณต์งํฉ์ผ ๊ฒฝ์ฐ
answer=1
else: #๊ณต์งํฉ์ด ์๋ ๊ฒฝ์ฐ
answer=len(minus)/len(sumlist)
answer=math.trunc(answer*65536) #๋ฒ๋ฆผ
return answer
๋ฌธ์ ๊ฐ ๋๋ฌด ๊ธธ์์ง๋ง ์ฝ์ด๋ณด๋ ๋จ์ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ฌธ์์ด 2๊ฐ๋ฅผ 2 ๊ธ์์ฉ ๋์ด์
๊ต์งํฉ๊ณผ ํฉ์งํฉ์ผ๋ก ๋ง๋ค์ด ๊ณ์ฐํ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
1) str1, str2๋ฅผ ์ํํ๋ฉฐ 2๊ธ์์ฉ ๋์ด์ list์ ์ถ๊ฐ
-> 2๊ธ์ ๋ชจ๋ ์๋ฌธ์๋ก๋ ๊ฒ๋ง ์ ํจํ๋ฏ๋ก isalpha๋ฅผ ํตํด ํ์ธ
-> ์๋ฌธ์, ๋๋ฌธ์ ๋ชจ๋ ์๊ด์์ผ๋ฏ๋ก lower์ ํตํด ์๋ฌธ์๋ก ํต์ผ
2) (๊ต์งํฉ) str1์ 2๊ธ์์ฉ ๋์ด ๋ฃ์ list๋ฅผ ์ํ
2-1) ๊ทธ ๊ฐ์ด str2๋ฅผ 2 ๊ธ์์ฉ ๋์ด ๋ฃ์ list์ ์กด์ฌํ๋ค๋ฉด
-> ๊ต์งํฉ list์ ์ถ๊ฐ
-> str2๋ฅผ 2๊ธ์์ฉ ๋์ด ๋ฃ์ list์์ ์ ๊ฑฐ
3) (ํฉ์งํฉ) str1์ 2๊ธ์์ฉ ๋์ด ๋ฃ์ list๋ฅผ ์ํ
3-1) ํฉ์งํฉ์ ๋ค ๋ค์ด๊ฐ์ผ ํ๋ฏ๋ก ํฉ์งํฉ list์ ์ถ๊ฐ
3-2) ๊ทธ ๊ฐ์ด str2๋ฅผ 2 ๊ธ์์ฉ ๋์ด ๋ฃ์ list์ ์กด์ฌํ๋ค๋ฉด
-> str2๋ฅผ 2๊ธ์์ฉ ๋์ด ๋ฃ์ list์์ ์ ๊ฑฐ
4) ํฉ์งํฉ list์ ๋จ์ B ๊ฐ์ ๋ฃ์ด์ค
5) ๋ชจ๋ ๊ณต์งํฉ์ธ ๊ฒฝ์ฐ -> answer =1
6) ๊ณต์งํฉ์ด ์๋ ๊ฒฝ์ฐ -> answer=(๊ต์งํฉ ๊ธธ์ด)/(ํฉ์งํฉ ๊ธธ์ด)
7) answer์ 65536์ ๊ณฑํ ํ ๋ฒ๋ฆผํ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ๋
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges
'๐Algorithm > ๐ฅprogrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers] ํ๊ฒ ๋๋ฒ (0) | 2021.04.04 |
---|---|
[programmers] ์ ๊ท ์์ด๋ ์ถ์ฒ - 2021 KAKAO BLIND RECRUITMENT (0) | 2021.01.27 |
[programmers] [1์ฐจ] ์บ์ - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.01.19 |
[programmers] ์์ด ๋๋ง์๊ธฐ - Summer/Winter Coding(~2018) (0) | 2021.01.12 |
[programmers] ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ - 2017 ํ์คํ์ด (0) | 2021.01.11 |