프로그래머스/Lv1

[프로그래머스/Javascript] Lv.1 둘만의 암호

woo.oing 2026. 1. 20. 15:01

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

 

프로그래머스

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

programmers.co.kr

 

 

✓ 풀이과정

 

1. 전달받은 문자열(sIdx)과 건너뛸 문자열(skipIdx)을 코드값으로 변환하여 저장

2. skipIdx 배열을 순회하며 하나의 코드마다 index만큼 +1 씩 추가하는데

만약 건너뛸 코드값을 만난다면 index를 하나씩 늘려가며 건너뛴 문자를 제외하고 index값 만큼 증가

3. 다시 코드를 문자열로 변환하여 반환

 

알파벳 배열을 저장해서 푸는 방법도 있지만 js에서 문자 코드 변환해주는 메서드를 사용해서 풀어보게 되었습니다

z 를 넘어가면 다시 a 로 돌아가는 조건을 알파벳 개수인 26을 나눈 나머지로 계산해서 해결했습니다

(a: 0, b: 1 ... z: 25, a: 26%26=0)

 

 

 최종코드

function solution(s, skip, index) {
  let sIdx = s.split("").map((str) => str.charCodeAt(0) - 97);
  let skipIdx = skip.split("").map((str) => str.charCodeAt(0) - 97);

  for (let i = 0; i < sIdx.length; i++) {
    let cnt = index;
    for (let j = 0; j < cnt; j++) {
      sIdx[i] = (sIdx[i] + 1) % 26;
      if (skipIdx.includes(sIdx[i])) cnt++;
    }
  }

  return sIdx.map((i) => String.fromCharCode(97 + i)).join("");
}