[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 보석 μ‡Όν•‘ / 파이썬 / 투 포인터
Problem Solving πŸ”₯/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 보석 μ‡Όν•‘ / 파이썬 / 투 포인터

https://programmers.co.kr/learn/courses/30/lessons/67258?language=python3

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 보석 μ‡Όν•‘

["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]

programmers.co.kr

풀이

문제λ₯Ό 읽고, μ—°μ†λœ 숫자 => 투 포인터 λ¬Έμ œλŠλ‚Œμ΄ λ‚˜μ„œ μ ‘κ·Όν–ˆλ”λ‹ˆ μ‰½κ²Œ ν’€ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
PSλ₯Ό C++μ—μ„œ 파이썬으둜 κ°ˆμ•„νƒ„μ§€ μ–Όλ§ˆ μ•ˆλλŠ”λ°, 파이썬의 μœ„λŒ€ν•¨μ„ λ‹€μ‹œ ν•œ 번 λŠλ‚„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
파이썬 μ§‘ν•©, λ”•μ…”λ„ˆλ¦¬ λ„ˆλ¬΄ νŽΈν•˜λ‹€...

def solution(gems):
    answer = []

    s = set()
    for gem in gems:
        s.add(gem)

    st, ed = 0, 0
    d = {}

    while ed < len(gems):
        gem = gems[ed]
        if gem in d:
            d[gem] += 1
        else:
            d[gem] = 1
        while st < ed:
            gem = gems[st]
            if d[gem] > 1:
                d[gem] -= 1
                st += 1
            else:
                break
        if len(d) == len(s):
            answer.append((st + 1, ed + 1))
        ed += 1

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