jujuwon
시크릿주주
jujuwon
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • 🔠 프로그래밍언어 (35)
      • ☕️ Java (19)
      • 🐠 Python (15)
      • 🍠 Kotlin (1)
    • 🔙 Backend (16)
      • 🌿 Springboot (12)
      • 🐳 Docker (1)
      • ☁️ AWS (3)
    • 💼 CS (12)
      • 📶 Network (12)
    • 🕹 알고리즘 (14)
      • 📑 스터디 (2)
      • 💁🏻‍♂️ 백준 (9)
      • 👨🏼‍🔬 프로그래머스 (3)
    • 📚 Book (8)
      • 🔎 오브젝트 (4)
      • 🧪 TDD (2)
      • 📜 논문 (2)
    • 🔐 보안 (7)
      • 👾 Pwnable (7)
    • 📝 회고 (4)
    • 🧩 etc. (10)
      • ⚠️ issue (2)
      • 💡 꿀팁 (7)
      • ✏️ 끄적 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
jujuwon

시크릿주주

프로그래머스 :: 보석 쇼핑 (Python)
🕹 알고리즘/👨🏼‍🔬 프로그래머스

프로그래머스 :: 보석 쇼핑 (Python)

2023. 6. 27. 14:56
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/67258

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근 방식

문제에서 주어진 보석 배열을 완전 탐색해야하는 문제이다.

그런데 N 이 10만..? 일반적인 탐색 알고리즘은 O(N^2) 이기 때문에,

O(N) 인 투포인터를 써야 하나 생각했다.

여기서 left, right 두 포인터를 인덱스로 두고 그 사이에 어떤 보석들이 있는지를 확인해야 하는데,

이 부분에서 효율성 점수가 깎일 수 있다.

어차피 포인터를 하나씩 증가시키기 때문에 gem_dict 라는 딕셔너리를 하나 만들어서

left 포인터가 한칸 증가하면 이전 dict 값은 하나 줄이고,

right 포인터가 한칸 증가하면 증가한 인덱스의 dict 값은 증가시키는 방식으로 구현했다.

 

풀이 코드

def solution(gems):
    answer = [1, len(gems)]
    gem_dict = {gems[0]: 1}
    kind = set(gems)
    len_range = 1e9

    left, right = 0, 0
    while left <= right and right < len(gems):
        if len(kind) == len(gem_dict):
            if (right - left) < len_range:
                len_range = right - left
                answer = [left+1, right+1]
            gem_dict[gems[left]] -= 1
            if gem_dict[gems[left]] == 0:
                del gem_dict[gems[left]]
            left += 1
        else:
            right += 1
            if right >= len(gems):
                break
            gem_dict[gems[right]] = gem_dict.get(gems[right], 0)
            gem_dict[gems[right]] += 1

    return answer

끝.

728x90
반응형
저작자표시
    '🕹 알고리즘/👨🏼‍🔬 프로그래머스' 카테고리의 다른 글
    • 프로그래머스 :: 개인정보 수집 유효기간 (Python)
    • 프로그래머스 :: 두 큐 합 같게 만들기 (Python)
    jujuwon
    jujuwon

    티스토리툴바