시저 암호

이묘·2022년 8월 4일
0

CodingTest

목록 보기
26/41
post-thumbnail

프로그래머스 코딩테스트 1단계

  • charCodeAt()
  • String.fromCharCode()



소스코드



function solution(s, n) {
    var result = '';

    for(var i = 0; i < s.length; i++) {
      	// 문자를 유니코드(UTF-16)로 변환
        var ASCII = s.charCodeAt(i);
      	// n만큼 문자를 밀어줌
        var answer = ASCII+n
        
        // 띄어쓰기 구별
        if(ASCII === 32){
            answer = ASCII;
        }
        // 대문자 구별
        else if(s[i] === s[i].toUpperCase() && s[i] !== s[i].toLowerCase()) {
          	// 유니코드값 90이상이면, Z를 벗어남
            if(answer > 90){
                answer -= 26;
            }
        }
        // 소문자 구별
      	else{
          	// 유니코드값 122이상이면 z를 벗어남
            if(answer > 122){
                answer -= 26;
            }
        }
      	//아스키코드를 다시 문자로 바꿔줌
        result += String.fromCharCode(answer);
    }

    return result;
}

console.log( solution( "a B c D", 25 ) )

// 결과값: "z A b C"



코드리뷰


s.charCodeAt(i)

s라는 문자열에서 i번째에 있는 문자를 유니코드로 변환해주는 메소드이다.
나는 문자열 전체를 유니코드로 변환해줘야하기 때문에 for문을 사용해주었다.

원래는 ASCII코드를 사용하려고 했는데 유니코드로 밖에 변환이 안됐다. 하지만 0번부터 127번까지는 유니코드와 아스키코드값이 같다고하니 결과에 크게 상관은 없었다.

String.fromCharCode(answer)

answer에 저장해놓은 유니코드값을 다시 문자로 바꿔주는 함수이다.

String.fromCharCode(num1,[num2, num3,...])

위와같은 형태로 적을 수 있다.
가능한 값의 범위는 0~65535(0xFFFF)까지이고, 초과하는 값은 잘린다.
유효성검사는 하지 않는다고 한다.
앞에 String은 정적 메소드라 첫자를 대문자로 적어줘야한다.




참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

profile
본질을 공부해야 응용도 하지 않을까

0개의 댓글