[Programmers] Level 3. 보석 쇼핑

2022. 11. 13. 18:22·코딩테스트/Python
728x90
반응형

🔗 Problem Link

 

프로그래머스

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

programmers.co.kr


❔Thinking

  • 구간 내의 모든 보석을 담을 때, 모든 종류의 보석이 하나 이상 담기는 가장 짧은 구간을 반환한다.

💻Solution

def solution(gems):
    n = len(set(gems))
    answer = [0, len(gems)-1]
    gem = {gems[0]: 1}
    s, e = 0, 0
    while s < len(gems) and e < len(gems):
        if len(gem) == n:
            if e-s < answer[1] - answer[0]:
                answer = [s, e]
            if gem[gems[s]] > 1:
                gem[gems[s]] -= 1
            else:
                del gem[gems[s]]
            s += 1
        else:
            e += 1
            if e == len(gems):
                break
            if gems[e] in gem.keys():
                gem[gems[e]] += 1
            else:
                gem[gems[e]] = 1
    return [answer[0]+1, answer[1]+1]

🗝️keypoint

  1. 구간을 하나씩 살피며 모든 보석이 하나 이상 담겼는지 확인하면, 시간초과가 발생한다.
  2. dict에 보석과 해당 보석의 개수를 담고, dict의 크기가 보석 종류의 개수와 일치하면 조건에 맞는 구간이라 판단한다.
  3. dict에 개수를 더하거나 뺄 때, 0개 일때는 dict에서 해당 보석을 제거해야 한다.
  4. 보석의 종류가 0개인 min(dict.values()) == 0을 활용하면, min의 시간복잡도로 인해 시간초과가 발생한다.

'코딩테스트 > Python' 카테고리의 다른 글

[Programmers] Level 3. 디스크 컨트롤러  (0) 2022.11.17
[Programmers] Level 2. 메뉴 리뉴얼  (0) 2022.11.15
[Programmers] Level 3. 불량 사용자  (0) 2022.11.11
[Baekjoon] 1463 - 1로 만들기  (0) 2022.11.01
[Baekjoon] 1003 - 피보나치 함수  (0) 2022.10.30
'코딩테스트/Python' 카테고리의 다른 글
  • [Programmers] Level 3. 디스크 컨트롤러
  • [Programmers] Level 2. 메뉴 리뉴얼
  • [Programmers] Level 3. 불량 사용자
  • [Baekjoon] 1463 - 1로 만들기
swwho
swwho
일상을 데이터화하다
  • swwho
    하루한장
    swwho
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • ML_DL (39)
        • MUJAKJUNG (무작정 시리즈) (18)
        • 딥러닝 공부하기 (21)
      • 데이터사이언스 (1)
        • EDA (1)
        • 데이터과학을 위한 통계 (0)
      • 데이터엔지니어링 (2)
      • 논문리뷰 (2)
        • Computer Vision (2)
      • Python 활용하기 (12)
      • 코딩테스트 (127)
        • Python (109)
        • MySQL (14)
      • Git (3)
      • MySQL 활용하기 (0)
      • 일상 이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
swwho
[Programmers] Level 3. 보석 쇼핑
상단으로

티스토리툴바