프로그래머스 보석쇼핑 코드 및 해설 (파이썬)
2021. 6. 1. 15:43ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/67258
코딩테스트 연습 - 보석 쇼핑
["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]
programmers.co.kr
카카오 공식 해설을 참고하여 풀이했습니다.
https://tech.kakao.com/2020/07/01/2020-internship-test/
2020 카카오 인턴십 for Tech developers 문제해설
2020년 카카오의 여름 인턴십이 시작 되었습니다.여름 인턴십의 첫번째 관문인 코딩 테스트가 2020년 5월 9일 오후 2시부터 6시까지 진행되었는데요, 온라인으로 진행되었기 때문에 코로나19로부터
tech.kakao.com
from collections import defaultdict
def solution(gems):
# [key] 보석이름, [value] 보석 개수
gem_dict = defaultdict(int)
# left, right 모두 0인 경우를 기준으로 gem_dict 값 초기화
# 첫 번째 보석만 한 개 포함된 상태
gem_dict[gems[0]] = 1
# 전체 보석 개수
N = len(set(gems))
span = len(gems) + 1
left, right = 0, 0
while True:
# 진열대 index 넘어가면 반복문 탈출
if left < 0 or right > len(gems)-1:
break
# 모든 보석이 포함된 경우
if len(gem_dict) == N:
# 구간의 길이가 짧은 경우
if right - left + 1 < span:
# 진열대 번호가 0이 아닌, 1부터 시작하므로
answer = [left+1, right+1]
span = right - left + 1
# 왼쪽 포인터 1만큼 증가
left += 1
# 그에 따라 없어지는 보석 개수 업데이트
gem_dict[gems[left-1]] -= 1
# 이때 특정 보석이 0개가 된 경우 딕셔너리에서 삭제
if gem_dict[gems[left-1]] == 0:
gem_dict.pop(gems[left-1])
# 모든 보석이 포함되지 않은 경우
else:
# 오른쪽 포인터 1만큼 증가
right += 1
# 증가해도 아직 진열대 안에 있다면
if right < len(gems):
# 새로 포함된 보석 빈도수 1만큼 증가
gem_dict[gems[right]] += 1
return answer
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 짝지어 제거하기 코드 및 해설 (파이썬) (0) | 2021.06.02 |
---|---|
프로그래머스 키패드 누르기 코드 및 해설 (파이썬) (1) | 2021.06.01 |
프로그래머스 JadenCase 문자열 만들기 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 오픈채팅방 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 체육복 코드 및 해설 (파이썬) (0) | 2021.06.01 |