250x250
Link
๋‚˜์˜ GitHub Contribution ๊ทธ๋ž˜ํ”„
Loading data ...
Notice
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Data Science LAB

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต level2 (๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง) ๋ณธ๋ฌธ

๐Ÿ“ Coding Test/Programmers

[Python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต level2 (๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง)

ใ…… ใ…œ ใ…” ใ…‡ 2022. 11. 2. 16:27
728x90

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๊ฐ€ ๋œ๋‹ค.

 

 

 

 

 

 

2. ๋‚ด ํ’€์ด

import re, math
def solution(str1, str2):
    str1, str2 = str1.lower(), str2.lower()
    list1 = [str1[x:x+2] for x in range(len(str1)-1) if str1[x:x+2].isalpha()]
    list2 = [str2[x:x+2] for x in range(len(str2)-1) if str2[x:x+2].isalpha()]
    interaction = []
    copy1, copy2 = list1.copy(), list2.copy()
    if list1 == [] and list2 == []:
        answer = 65536
    else:
        for i in list1:
            if i in copy2:
                interaction.append(i)
                copy1.remove(i)
                copy2.remove(i)
        union = interaction + copy1 + copy2
        answer = math.floor(len(interaction)/len(union)*65536)
    return answer

 

1. ์†Œ๋ฌธ์ž, ๋Œ€๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‘ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜

2. for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ 2๊ธ€์ž์˜ ์˜์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๊ธ€์ž๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ฐ›์•„์คŒ (isalpha(): ์˜์–ด๋ฉด True, ์•„๋‹ˆ๋ฉด False ๋ฐ˜ํ™˜)

3. ๋งŒ์•ฝ ๋‘ ๋ฆฌ์ŠคํŠธ ๋ชจ๋‘ ๋น„์–ด์žˆ์œผ๋ฉด answer = 65536

4. list1์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๊ฐ€ list2์—๋„ ์กด์žฌํ•˜๋ฉด interaction ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€, ๋ณต์‚ฌ๋œ ๋ฆฌ์ŠคํŠธ 1,2์—์„œ๋Š” ๊ฐ๊ฐ ์‚ญ์ œ์ฒ˜๋ฆฌ

5. ํ•ฉ์ง‘ํ•ฉ์€ ๊ต์ง‘ํ•ฉ + ๋ฆฌ์ŠคํŠธ์— ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ์š”์†Œ ๋กœ ๊ณ„์‚ฐ

6. floor()ํ•จ์ˆ˜๋กœ ๊ฒฐ๊ณผ๊ฐ’ ๊ณ„์‚ฐ

 

 

3. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด

import re
import math

def solution(str1, str2):
    str1 = [str1[i:i+2].lower() for i in range(0, len(str1)-1) if not re.findall('[^a-zA-Z]+', str1[i:i+2])]
    str2 = [str2[i:i+2].lower() for i in range(0, len(str2)-1) if not re.findall('[^a-zA-Z]+', str2[i:i+2])]

    gyo = set(str1) & set(str2)
    hap = set(str1) | set(str2)

    if len(hap) == 0 :
        return 65536

    gyo_sum = sum([min(str1.count(gg), str2.count(gg)) for gg in gyo])
    hap_sum = sum([max(str1.count(hh), str2.count(hh)) for hh in hap])

    return math.floor((gyo_sum/hap_sum)*65536)

 

1. str1,2๋ฅผ ๊ฐ๊ฐ ๋‘๊ธ€์ž์”ฉ ๋‚˜๋ˆ„์–ด ์˜์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›์•„์คŒ

2. ๊ฐ๊ฐ์˜ ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ•จ

3. ํ•ฉ์ง‘ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ 65536 ๋ฐ˜ํ™˜

4. ๊ต์ง‘ํ•ฉ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๊ฐ€ ๊ฐ๊ฐ ์›๋ž˜์˜ ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด์žˆ์—ˆ์„ ๋•Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜์—ฌ ๋‘˜ ์ค‘ ์ž‘์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋”ํ•ด์คŒ

    ํ•ฉ์ง‘ํ•ฉ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๊ฐ€ ๊ฐ๊ฐ ์›๋ž˜์˜ ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด์žˆ์—ˆ์„ ๋•Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜์—ฌ ๋‘˜ ์ค‘ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋”ํ•ด์คŒ

5. ๊ต์ง‘ํ•ฉ์˜ ์ˆ˜ / ํ•ฉ์ง‘ํ•ฉ์˜ ์ˆ˜ * 65536 ๋ฐ˜ํ™˜

 

 

def solution(str1, str2):

    list1 = [str1[n:n+2].lower() for n in range(len(str1)-1) if str1[n:n+2].isalpha()]
    list2 = [str2[n:n+2].lower() for n in range(len(str2)-1) if str2[n:n+2].isalpha()]

    tlist = set(list1) | set(list2)
    res1 = [] #ํ•ฉ์ง‘ํ•ฉ
    res2 = [] #๊ต์ง‘ํ•ฉ

    if tlist:
        for i in tlist:
            res1.extend([i]*max(list1.count(i), list2.count(i)))
            res2.extend([i]*min(list1.count(i), list2.count(i)))

        answer = int(len(res2)/len(res1)*65536)
        return answer

    else:
        return 65536

 

1. ๋‚ด๊ฐ€ ํ’€์ดํ•œ ๋ฐฉ์‹๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ ๋ฌธ์ž์—ด์„ isalpha()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ธ€์ž์”ฉ ๋Š์–ด์„œ ๋ฐ˜ํ™˜

2. ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง‘ํ•ฉํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•ฉ์ง‘ํ•ฉ์„ ์ƒ์„ฑ

3. ํ•ฉ์ง‘ํ•ฉ์— ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ -> for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ tlist์— ์กด์žฌํ•˜๋Š” ์š”์†Œ๋“ค์„ ๊ฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์นด์šดํŠธํ•˜์—ฌ ํ•ฉ์ง‘ํ•ฉ์—๋Š” ์ตœ๋Œ€๊ฐ’๋งŒํผ ์ถ”๊ฐ€, ๊ต์ง‘ํ•ฉ์—๋Š” ์ตœ์†Œ๊ฐ’๋งŒํผ ์ถ”๊ฐ€ํ•ด์ค€ ๋’ค ๊ณ„์‚ฐ

ํ•ฉ์ง‘ํ•ฉ์— ์›์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ -> 65536 ๋ฐ˜ํ™˜

728x90
Comments