[프로그래머스] 비밀 코드 해독

Chobby·2025년 2월 10일
1

LeetCode

목록 보기
225/448

😎풀이

  1. a부터 e까지 오름차 순으로 정렬된 5개의 조합을 찾기 위해 5중 반복한다.
  2. 각 조합에서 q의 모든 조건과 그에 맞는 ans의 수가 같은지 비교한다.
    2-1. 모든 조건이 일치할 경우 정답을 카운트한다.
    2-2. 하나라도 조건이 불일치 할 경우 다음 조합을 확인한다.
  3. 확인된 결과를 반환한다.
function solution(n, q, ans) {
  let count = 0;
  
  // 5개의 정수를 선택하는 모든 조합 (오름차순으로 선택된 조합)
  for (let a = 1; a <= n - 4; a++) {
    for (let b = a + 1; b <= n - 3; b++) {
      for (let c = b + 1; c <= n - 2; c++) {
        for (let d = c + 1; d <= n - 1; d++) {
          for (let e = d + 1; e <= n; e++) {
            const candidate = [a, b, c, d, e]; // 현재 비밀 코드 후보
            
            // 모든 시도(q)에서 candidate와 입력한 숫자들 간의 일치 개수 비교
            let valid = true; // 현재 candidate가 모든 조건을 만족하는지 여부
            
            for (let i = 0; i < q.length; i++) {
              const query = q[i];
              const expectedMatch = ans[i];
              let matchCount = 0;
              
              // candidate와 query 사이의 공통 요소 개수 카운트
              for (let num of candidate) {
                if(!query.includes(num)) continue
                matchCount++;
              }
              
              // 일치 수가 다르다면 제외
              if (matchCount !== expectedMatch) {
                valid = false;
                break;
              }
            }
            
            // 모든 시도 만족하면 개수 증가
            if (valid) count++;
          }
        }
      }
    }
  }
  
  return count;
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글