개발/알고리즘
[프로그래머스] 비밀 코드 해독
개발자_티모
2025. 6. 22. 15:37
반응형
문제 이해하기
비밀 코드는 1 ~ n 사이의 서로 다른 5개의 수로 구성된 오름차순 조합입니다.
총 m번의 시도를 통해 비밀 코드를 추측할 수 있으며, 매 시도마다 서로 다른 5개의 수를 입력합니다.
시스템은 각 시도에 대해, 입력값 중 몇 개가 비밀 코드에 포함되어 있는지를 알려줍니다.
예를 들어, 비밀 코드가 [3, 5, 7, 9, 10]이고
우리가 [1, 2, 3, 4, 5]를 입력했다면,
겹치는 수는 3과 5, 총 2개이므로 시스템은 2를 응답합니다
문제 해결 방법 설명하기
- 가능한 모든 5개 조합을 생성합니다. (1 ~ n 중 5개 선택)
- 각 조합이 모든 시도의 결과와 정확히 일치하는지 확인합니다.
- 조건을 모두 만족하는 조합만을 필터링하여 개수를 셉니다.
코드
function getCombinations(arr, selectCount) {
const result = [];
function combine(current, start) {
if (current.length === selectCount) {
result.push([...current]);
return;
}
for (let i = start; i < arr.length; i++) {
current.push(arr[i]);
combine(current, i + 1);
current.pop();
}
}
combine([], 0);
return result;
}
function solution(n, q, ans) {
var answer = 0;
const arr = Array.from({ length: n }, (_, i) => i + 1);
combs = getCombinations(arr, 5)
for(let i = 0; i < combs.length; ++i){
let isRight = true
for(let j = 0; j < ans.length; ++j){
const target = ans[j]
const set = new Set(q[j]);
const result = combs[i].filter(x => set.has(x));
if(target !== result.length){
isRight = false
break
}
}
if(isRight){
answer += 1
}
}
return answer;
}
코드 리뷰
기존에는 다음과 같이 isRight
변수를 선언하고 상태를 관리했습니다. 두 구조는 동등하지만, 두 번째 방식은 불필요한 상태 변수 없이 흐름을 제어할 수 있어 더 간결하고 읽기 쉽습니다. 물론, 두 접근 방식 중 어떤 것을 선택할지는 가독성과 팀 코드 스타일에 따라 유연하게 결정할 수 있습니다.
let isRight = true;
for (조건 반복) {
if (조건 불만족) {
isRight = false;
break;
}
}
if (isRight) {
answer += 1;
}
-- 새로운 코드 ---
for (let i = 0; i < n; ++i) {
if (조건 불만족) break;
if (i === n - 1) {
// 조건을 끝까지 통과했을 때 수행할 로직
}
}
반응형