250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 3 (보석 μ‡Όν•‘) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level 3 (보석 μ‡Όν•‘)

γ…… γ…œ γ…” γ…‡ 2022. 11. 8. 23:40
728x90

1. 문제 μ„€λͺ…

개발자 μΆœμ‹ μœΌλ‘œ 세계 졜고의 κ°‘λΆ€κ°€ 된 μ–΄ν”ΌμΉ˜λŠ” 슀트레슀λ₯Ό 받을 λ•Œλ©΄ 이λ₯Ό ν’€κΈ° μœ„ν•΄ μ˜€ν”„λΌμΈ 맀μž₯에 쇼핑을 ν•˜λŸ¬ κ°€κ³€ ν•©λ‹ˆλ‹€.
μ–΄ν”ΌμΉ˜λŠ” 쇼핑을 ν•  λ•Œλ©΄ 맀μž₯ μ§„μ—΄λŒ€μ˜ νŠΉμ • λ²”μœ„μ˜ 물건듀을 λͺ¨λ‘ 싹쓸이 κ΅¬λ§€ν•˜λŠ” μŠ΅κ΄€μ΄ μžˆμŠ΅λ‹ˆλ‹€.
μ–΄λŠ λ‚  슀트레슀λ₯Ό ν’€κΈ° μœ„ν•΄ 보석 맀μž₯에 쇼핑을 ν•˜λŸ¬ κ°„ μ–΄ν”ΌμΉ˜λŠ” μ΄μ „μ²˜λŸΌ μ§„μ—΄λŒ€μ˜ νŠΉμ • λ²”μœ„μ˜ 보석을 λͺ¨λ‘ κ΅¬λ§€ν•˜λ˜ νŠΉλ³„νžˆ μ•„λž˜ λͺ©μ μ„ λ‹¬μ„±ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€.
μ§„μ—΄λœ λͺ¨λ“  μ’…λ₯˜μ˜ 보석을 적어도 1개 이상 ν¬ν•¨ν•˜λŠ” κ°€μž₯ 짧은 ꡬ간을 μ°Ύμ•„μ„œ ꡬ맀

예λ₯Ό λ“€μ–΄ μ•„λž˜ μ§„μ—΄λŒ€λŠ” 4μ’…λ₯˜μ˜ 보석(RUBY, DIA, EMERALD, SAPPHIRE) 8κ°œκ°€ μ§„μ—΄λœ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

μ§„μ—΄λŒ€μ˜ 3λ²ˆλΆ€ν„° 7λ²ˆκΉŒμ§€ 5개의 보석을 κ΅¬λ§€ν•˜λ©΄ λͺ¨λ“  μ’…λ₯˜μ˜ 보석을 적어도 ν•˜λ‚˜ 이상씩 ν¬ν•¨ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ§„μ—΄λŒ€μ˜ 3, 4, 6, 7번의 λ³΄μ„λ§Œ κ΅¬λ§€ν•˜λŠ” 것은 쀑간에 νŠΉμ • ꡬ간(5번)이 λΉ μ§€κ²Œ λ˜λ―€λ‘œ μ–΄ν”ΌμΉ˜μ˜ μ‡Όν•‘ μŠ΅κ΄€μ— λ§žμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ§„μ—΄λŒ€ 번호 μˆœμ„œλŒ€λ‘œ λ³΄μ„λ“€μ˜ 이름이 μ €μž₯된 λ°°μ—΄ gemsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ΄λ•Œ λͺ¨λ“  보석을 ν•˜λ‚˜ 이상 ν¬ν•¨ν•˜λŠ” κ°€μž₯ 짧은 ꡬ간을 μ°Ύμ•„μ„œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.
κ°€μž₯ 짧은 κ΅¬κ°„μ˜ μ‹œμž‘ μ§„μ—΄λŒ€ λ²ˆν˜Έμ™€ λ μ§„μ—΄λŒ€ 번호λ₯Ό μ°¨λ‘€λŒ€λ‘œ 배열에 λ‹΄μ•„μ„œ return ν•˜λ„λ‘ ν•˜λ©°, λ§Œμ•½ κ°€μž₯ 짧은 ꡬ간이 μ—¬λŸ¬ 개라면 μ‹œμž‘ μ§„μ—΄λŒ€ λ²ˆν˜Έκ°€ κ°€μž₯ μž‘μ€ ꡬ간을 return ν•©λ‹ˆλ‹€.

 

 

 

2. μ œν•œ 쑰건

  • gems λ°°μ—΄μ˜ ν¬κΈ°λŠ” 1 이상 100,000 μ΄ν•˜μž…λ‹ˆλ‹€.
    • gems λ°°μ—΄μ˜ 각 μ›μ†ŒλŠ” μ§„μ—΄λŒ€μ— λ‚˜μ—΄λœ 보석을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • gems λ°°μ—΄μ—λŠ” 1번 μ§„μ—΄λŒ€λΆ€ν„° μ§„μ—΄λŒ€ 번호 μˆœμ„œλŒ€λ‘œ 보석이름이 μ°¨λ‘€λŒ€λ‘œ μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • gems λ°°μ—΄μ˜ 각 μ›μ†ŒλŠ” 길이가 1 이상 10 μ΄ν•˜μΈ μ•ŒνŒŒλ²³ λŒ€λ¬Έμžλ‘œλ§Œ κ΅¬μ„±λœ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.

 

 

 

 

 

3. λ‚΄ 풀이

- νš¨μœ¨μ„± ν…ŒμŠ€νŠΈ μ‹€νŒ¨

from collections import Counter
def solution(gems):
    answer = []
    buy = len(set(gems))
    n = 0
    
    while len(answer) == 0:
        for i in range(len(gems) - buy - n + 1):
            if buy == len(set(gems[i:i+buy+n])):
                answer = [i+1,i+buy+n]
                break
        n+=1
    return answer

 

 

import collections

def solution(gems):
    num = len(set(gems))
    ret = []

    left = 0
    counter = collections.Counter()
    for right in range(len(gems)):
        counter[gems[right]] += 1
        right += 1
        while len(counter) == num:
            counter[gems[left]] -= 1
            if counter[gems[left]] == 0:
                del counter[gems[left]]
            left += 1
            ret.append([left, right])

    return sorted(ret, key = lambda x: (x[1]-x[0], x[0]))[0]

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

def solution(gems):
    size = len(set(gems))
    dic = {gems[0]:1}
    temp = [0, len(gems) - 1]
    start , end = 0, 0

    while(start < len(gems) and end < len(gems)):
        if len(dic) == size:
            if end - start < temp[1] - temp[0]:
                temp = [start, end]
            if dic[gems[start]] == 1:
                del dic[gems[start]]
            else:
                dic[gems[start]] -= 1
            start += 1

        else:
            end += 1
            if end == len(gems):
                break
            if gems[end] in dic.keys():
                dic[gems[end]] += 1
            else:
                dic[gems[end]] = 1

    return [temp[0]+1, temp[1]+1]
728x90
Comments