2023. 4. 22. 13:17ㆍAlgorithm/프로그래머스
level : 2
문제 링크 : 혼자 놀기의 달인
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
My Solution
function solution(cards) {
const len = cards.length;
let visited = new Array(len).fill(false);
let result = [];
while(visited.filter(v=>v).length < len){
let temp = [];
/// 첫번째 숫자 뽑기
for(let i = 0; i < len; i++){
if(!visited[i]){
temp.push(i);
visited[i] = true;
break;
}
}
const start = temp[0];
while(cards[temp[temp.length - 1]] - 1 !== start){
visited[cards[temp[temp.length - 1]] - 1] = true;
temp.push(cards[temp[temp.length - 1]] - 1);
}
result.push(temp);
}
result.sort((a,b)=>b.length - a.length);
return result.length > 1 ? result[0].length * result[1].length : 0;
}
풀이방법
위 문제에서 주어지는 cards에 index가 주어진다. 이때 index는 1부터 시작한다.
cards에서 순환하는 배열을 찾아 가장 긴 배열 두 개의 길이의 곱이 범희가 게임에서 최고점을 얻을 수 있다.
먼저 뽑지 않은 상자 중 가장 앞에 있는 상자를 선택한다.
가장 먼저 뽑은 상자의 숫자는 start로 뽑은 상자의 index에 해당하는 visited를 true를 변환하고 뽑은 상자의 수보다 1작은 index에 해당하는 cards의 상자를 뽑는다.
가장 최근에 뽑은 상자의 index에 해당하는 visited를 true를 변환하고 다시 가장 최근에 뽑은 숫자에 해당하는 index - 1의 cards의 상자를 start로 돌아오기 전까지 계속 뽑으며 위와 같은 과정을 반복한다.
뽑을 때마다 index를 배열에 넣어 temp라는 배열을 만든다.
temp라는 배열을 전체 배열 result에 push한다.
result의 원소는 순환하는 배열의 index를 가지는 배열로 이루어져 있다.
그러므로 result를 원소의 길이를 기준으로 내림차순으로 정렬한다.
만약 result에 2개 이상의 배열이 있다면 가장 앞의 2개의 배열의 길이를 반환하고 아닐 경우 0을 반환한다.
느낀점
처음에는 눈에 문제가 들어 오지 않았으나 차근히 읽어보면 어렵지 않은 문제다.
지금 내 설명이 좋지 못하더라도 적어 놓고 틈틈히 다시 보며 더욱 이해가 쉽도록 명확하게 적어야겠다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Go] qr code (0) | 2024.08.01 |
---|---|
[Python] 숫자 짝꿍 (0) | 2022.10.20 |
[JavaScript] 단어 변환 (0) | 2022.09.26 |
[JavaScript] 다음 큰 숫자 (0) | 2022.09.25 |
[JavaScript] 야근 지수 (0) | 2022.09.17 |