- 문제
문제 설명
두 문자열 s와 skip, 그리고 자연수 index가 주어졌을 때, 정해진 규칙에 따라 문자열을 만들고자 한다고 한다.
규칙은 다음과 같다.
- 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔준다.
- index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아간다.
- skip에 있는 알파벳은 제외하고 건너뛴다.
예시로 s = "a", skip = "bcd" index=2라고 했을 때 반환 값은 a에서 skip에 있는 알파벳을 제외하고 2를 더한 "f"가 된다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 반환해 주면 되는 문제이다.
※제한사항
- 5 <= s의 길이 <= 50
- 1 <= skip의 길이 <= 10
- s와 skip은 알파벳 소문자로만 이루어져 있다.
- skip에 포함되는 알파벳은 s에 포함되지 않는다.
- 1 <= index <= 20
풀이
먼저 스킵해야할 문자를 구분하기 위해 skipChar 배열을 생성한 다음 skip의 각 문자들을 아스키코드로 바꿔 저장해주었다.
그리고 s에 있는 문자들에 대해 반복문을 돌려 각 문자를 아스키코드로 변환한 다음 char 변수에 저장하고, index만큼 반복문을 돌려주었다.
index만큼 반복되는 동안 char를 1씩 증가시켜 주었고, char+1이 'z'일 시 char값을 'a'로 바꿔주는 작업을 하였다.
그리고 char를 증가할 때마다 skipChar에 있는 문자인지 확인해 주어 스킵해야 할 문자일 시 char를 1씩 증가시켜 주었다.
마찬가지로 char+1이 'z'일 시 char값을 'a'로 바꿔주었다. 여기서 'z'를 'a'로 바꿔줬을 때 'a'가 skipChar에 있는 문자일 수도 있으므로 skipChar에 있는 문자인지 확인해 주는 부분을 while문으로 처리하여 skipChar에 문자가 없을 때까지 반복문을 돌려주었다.
그리고 변환된 문자를 최종적으로 반환할 변수 answer에 저장해 주었다.
아래는 풀이에 사용한 코드이다.
function solution(s, skip, index) {
var answer = ''; // 최종적으로 반환할 문자열
var skipChar = []; // skip의 각 요소의 아스키코드값을 저장하는 배열
// skip의 각 요소의 아스키코드값을 skipChar에 추가해준다.
skip.split('').map((skipStr) => {
skipChar.push(skipStr.charCodeAt())
})
// s의 각 요소을 돌며 알파벳을 암호화해주는 부분
s.split('').map((str) => {
// str의 아스키코드를 저장하는 임시 변수
var char = str.charCodeAt()
// index만큼 char를 증가시켜준다.
for(var i=0; i<index;i++){
char+1 > 'z'.charCodeAt() ? char = 'a'.charCodeAt() : char++
// skipChar에 있는 문자일 시 char를 한번 더 증가시킨다.
while(skipChar.includes(char)){
char+1 > 'z'.charCodeAt() ? char = 'a'.charCodeAt() : char++
}
}
// 암호화된 문자를 answer에 추가해준다.
answer += String.fromCharCode(char)
})
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.03 연습문제 [1차] 셔틀버스 (JavaScript) (1) | 2024.06.03 |
---|---|
[프로그래머스] Lv.01 연습문제 대충 만든 자판 (JavaScript) (0) | 2024.05.17 |
[프로그래머스] Lv.01 연습문제 명예의 전당(1) (JavaScript) (0) | 2024.05.10 |
[프로그래머스] Lv.01 연습문제 개인정보 수집 유효기간 (JavaScript) (0) | 2024.05.05 |
[프로그래머스] Lv.01 연습문제 성격 유형 검사하기 (JavaScript) (0) | 2024.05.03 |