일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 15686번
- 12865번
- 1038번
- 백준 알고리즘
- 파이썬
- 19238번
- 거울 설치
- 2020 카카오 인턴십
- QueryDSL 기초
- 베스트엘범
- 17144번
- 프로그래머스
- 어른 상어
- 14499번
- 감소하는 수
- 1789번
- 빛의 경로 사이클
- 보석 쇼핑
- 경주로 건설
- 9095번
- SW ExpertAcademy
- 수식 최대화
- HTML 기초
- SW Expert Academy
- 스타트 택시
- 12869번
- 키패드 누르기
- 16234번
- python
- 미세먼지 안녕!
Archives
- Today
- Total
보물창고 블로그
2020 카카오 인턴십 보석 쇼핑 풀이 With Python 본문
728x90
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/67258
코딩테스트 연습 - 보석 쇼핑
["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]
programmers.co.kr
실제 시험에서 이 문제를 풀지 못하였습니다. 프로그래머스에서 복원된 문제를 다시 풀었는데, 다시 푸니 의외로 생각했던 것보다 쉬운 문제였습니다. 어렵다고 생각하니 어렵게 느껴진 것 같습니다. 모든 것은 마음먹기에 달린 것 같습니다.
문제를 해결한 방법은 start와 end 변수를 두어, 처음에 모두 0으로 초기화시키고, end를 늘리면서 dict 자료구조에 보석의 수를 카운트합니다. 만약 전체 보석수와 dict 보석 종류의 수가 같다면, start를 1씩 증가시키면서 가장 작은 길이를 찾습니다. 파이썬은 인덱스가 0부터 시작하므로 마지막에 start와 end에 1씩 더해줍니다. 소스코드는 아래와 같습니다.
def solution(gems):
n = len(set(gems))
answer = [0, len(gems) - 1]
start = 0
end = 0
dic1 = {gems[0]: 1}
while start < len(gems) and end < len(gems):
if len(dic1) == n:
if answer[1] - answer[0] > end - start:
answer[0] = start
answer[1] = end
if dic1[gems[start]] == 1:
del dic1[gems[start]]
else:
dic1[gems[start]] -= 1
start += 1
else:
end += 1
if end == len(gems):
break
else:
if dic1.get(gems[end]) is None:
dic1[gems[end]] = 1
else:
dic1[gems[end]] += 1
answer[0] += 1
answer[1] += 1
return answer
소스코드에 대한 질문이 있으신 경우 댓글 남겨주시면 답변드리겠습니다. 읽어주셔서 감사합니다. :-)
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 완주하지 못한 선수 풀이 With Python (0) | 2022.02.12 |
---|---|
프로그래머스 프린터 풀이 With Python (0) | 2020.07.09 |
2020 카카오 인턴십 동굴 탐험 풀이 With Python (6) | 2020.07.06 |
2020 카카오 인턴십 경주로 건설 풀이 With Python (1) | 2020.07.06 |
2020 카카오 인턴십 수식 최대화 풀이 With Python (4) | 2020.07.06 |
Comments