반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/67258
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이 힌트
슬라이딩 윈도우를 이용하자.
반복문 2개를 활용하면 되는데
- 큰 반복문 : 윈도우 사이즈를 보석 종류 개수부터 시작해서 1씩 크게 한다.
- 그 안에 작은 반복문: 해당 윈도우 사이즈 만큼 gems를 전체 돌아다니면서 조건을 만족하는지 확인한다.
조건은, Set 객체를 활용한다.
정답 풀이 코드
function solution(gems) {
let set = [...new Set(gems)]; //중복되지않은 보석 배열
let n = set.length; //개수
for(let i=n; i<=gems.length; i++){ //윈도우 사이즈 1씩 늘려준다.
let sIdx = 0; //gems 배열을 탐색할 시작 idx
while(sIdx+i <= gems.length){ //sIdx도 1씩 늘려줄건데, gems의 마지막 idx까지만
if(check(gems.slice(sIdx, sIdx+i), set)) return [sIdx+1, sIdx+i] //조건을 만족하면 해당 idx 출력
sIdx++; //조건 만족하지 못하면 sIdx+1 로, 탐색 계속 해야함.
}
}
}
//해당 배열과 set 배열을 개수를 비교하는 함수
function check(arr,set){
if([...new Set(arr)].length === set.length) return true; //둘다 중복되지 않은 보석 개수가 같다면 return true
else return false;
}
Only 풀이 코드
function solution(gems) {
let set = [...new Set(gems)];
let n = set.length;
for(let i=n; i<=gems.length; i++){
let sIdx = 0;
while(sIdx+i <= gems.length){
if(check(gems.slice(sIdx, sIdx+i), set)) return [sIdx+1, sIdx+i]
sIdx++;
}
}
}
function check(arr,set){
if([...new Set(arr)].length === set.length) return true;
else return false;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스: 다단계 칫솔 판매 - javascript(구현 및 dfs) (0) | 2024.05.12 |
---|---|
프로그래머스: 징검다리 건너기 - javascript(이분탐색) (0) | 2024.05.08 |
프로그래머스: 불량 사용자 - javascript(정규식, 완전탐색(dfs), 중복제거 Set) (0) | 2024.05.06 |
프로그래머스: 문자열 압축 - javascript(반복문 관건) (0) | 2024.04.24 |
프로그래머스: 거리두기 확인하기 - javascript(bfs, 규칙찾기) (0) | 2024.04.23 |