본문 바로가기

Coding/내일배움캠프

[내일배움캠프] Node.js 4기 TIL | Day 51 | 24.02.22.(목)

function solution(s, skip, index) {
    var answer = '';
    
    for (let i = 0 ; i < skip.length; i++){
        console.log("skip[" + i + "] : " + skip[i]);
    }
    
    // s의 각 알파벳을 index 만큼의 뒤의 알파벳으로 바꿔준다.
        // s와 skip은 알파벳 소문자로만 이루어져 있다.
        // skip에 포함되는 알파벳은 s에 포함되지 않는다.
    
    var newArr = new Array(s.length);
    
    for (let i = 0 ; i < s.length; i++){
        
        while(index){
            // s의 각 알파벳을 index만큼의 뒤의 알파벳으로 바꿔준다.
            // 반복문을 한 번 돌 때, 한 칸씩 이동한다.
            newArr[i] = s.charCodeAt(i) + 1; // skip에 관련된 내용은 안 세어 주었음
            // z보다 큰 경우, a로 돌아간다.
            if (newArr[i] > 122){ // 현재 여기에 해당하는 경우가 발생하지 않고 있음
                newArr[i] -= 25;
                console.log("newArr[i] > 122, index : " + index);
            }
            // a로 돌아갔으면 
            
            // skip에 포함된 알파벳이 되는 경우 이동 횟수를 차감하지 않는다?
            // → 현재 인덱스에 해당하는 문자를 skip 배열에서 찾게 된다면 이동 횟수(index)를 차감하지 않는다.
            // → 현재 인덱스에 해당하는 문자가 skip 배열에 존재하지 않는다면 이동 횟수(index)를 차감한다.
            if (skip.indexOf(newArr[i]) === -1){
                console.log("skip.indexOf(newArr[" + i + "]) : " + skip.indexOf(newArr[i]));
                index--;
            }
        
            console.log("index : " + index + ", newArr[" + i + "] : " + newArr[i]);
        }
        
        // 아스키를 다시 문자로 바꿔줘야 함.
        newArr[i] = String.fromCharCode(newArr[i]);
        
        console.log("s의 " + i + "번째 문자 : " + s[i]);
        console.log("newArr의 " + i + "번째 문자 : " + newArr[i]);
    }
    
    // newArr 값이 할당되지 않고 있음
    answer = newArr;
    
    return answer;
}

// 아스키 코드
// A(65) ~ Z(90)
// a(97) ~ z(122)

// js 아스키 코드

// charCodeAt() | 문자의 아스키코드를 반환
// String.fromCharCode(아스키 번호) | 아스키 번호의 문자를 반환
// codePointAt() | 문자의 아스키 코드를 반환

// charCodeAt()과 codePointAt()의 차이?
// charCodeAt() : UTF-16 코드 단위를 반환
// codePointAt() : Unicode 코드 단위를 반환
// 등등등