[2020 KAKAO TECH INTERNSHIP Level 3] 보석 쇼핑
1분 읽기
풀이 1: 투 포인터
function solution(gems) {
const types = new Set(gems).size;
const count = {};
let start = 0, end = 0, contained = 0;
let range = [0, gems.length - 1];
const add = (gem) => {
if (!count[gem]) count[gem] = 0;
if (count[gem]++ === 0) contained++;
};
const del = (gem) => {
if(--count[gem] === 0) contained--;
}
add(gems[start]);
while(start < gems.length && end < gems.length){
if(types === contained){
if(range[1] - range[0] > end - start){
range = [start, end];
}
del(gems[start++]);
} else {
add(gems[++end]);
}
}
// ✅ 1-Based Indexing
return range.map(idx => idx + 1);
}Review
[제한 사항]
- gems 배열의 크기는 1 이상 100,000 이하입니다.
- gems 배열의 각 원소는 진열대에 나열된 보석을 나타냅니다.
- gems 배열에는 1번 진열대부터 진열대 번호 순서대로 보석이름이 차례대로 저장되어 있습니다.
- gems 배열의 각 원소는 길이가 1 이상 10 이하인 알파벳 대문자로만 구성된 문자열입니다.
Two Pointers7편 중 7번째
- 1. [프로그래머스 Level 2] 연속된 부분 수열의 합
- 2. [프로그래머스 Level 2] 할인 행사
- 3. [2022 KAKAO TECH INTERNSHIP Level 2] 두 큐 합 같게 만들기
- 4. [백준 Silver 4] 수들의 합 2
- 5. [백준 Gold 4] 부분합
- 6. [프로그래머스 Level 3] 가장 긴 팰린드롬
- 7. [2020 KAKAO TECH INTERNSHIP Level 3] 보석 쇼핑
관련 글
4분 읽기
소수 구하기
소수 판별법과 소수를 구하는 알고리즘을 정리합니다.
1분 읽기
[프로그래머스 Level 2] 미로 탈출
프로그래머스 미로 탈출을 BFS로 풀이합니다.
1분 읽기
[프로그래머스 Level 2] 마법의 엘리베이터
프로그래머스 마법의 엘리베이터를 자리수 그리디로 풀이합니다.