몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 2] 비밀 코드 해독 {언어 : JavaScript} 본문

알고리즘/풀었지만 다시 보기

프로그래머스 [Lv. 2] 비밀 코드 해독 {언어 : JavaScript}

스위태니 2025. 3. 23. 14:23
728x90

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/388352

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

function solution(n, q, ans) {
    const lenQ = q.length;
    let answer = 0;
    for (let i = 1; i <= n; i++) {
        for (let j = i+1; j <= n; j++) {
            for (let k = j+1; k <= n; k++) {
                for (let l = k+1; l <= n; l++) {
                    for (let m = l+1; m <= n; m++) {
                        // 현재 배열이 q와 비교했을 때 ans 값과 일치하는지 확인
                        let selectedArr = [i, j, k, l, m];
                        let check = true;
                        for (let o = 0; o < lenQ; o++) {
                            let cnt = 0;
                            for (let p = 0; p < 5; p++) {
                                if (q.at(o).includes(selectedArr.at(p))) {
                                    cnt++;
                                }
                            }
                            if (cnt !== ans.at(o)) {
                                check = false;
                                break;
                            }
                        }
                        if (check) {
                            answer++;
                        }
                    }
                }
            }
        }
    }
    return answer;
}

풀이 방법

  1. dfs로 만들다가 실패해서 5중 for문으로 만들었다.
  2. 조합을 만들어서 q의 요소들과 비교한다.
  3. ans와 같은 값이 나오면 answer++
  4. 이후 answer를 출력하면 끝!

느낀점

  • 사실 dfs를 사용해야 더 깔끔한 풀이가 될 수 있지만 결국 가장 직관적이고 바로 해결할 수 있는 방법을 고안했다.
  • 어차피 조합은 반복문의 연속이다.

 

728x90