알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.
예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
코드
function solution(s, n) {
return s.split('').map((value) => {
if(value == ' ') return ' '; // 공백일 시 공백 return
let code = value.charCodeAt(0); // 유니코드 나타내는 정수
if(code <= 90 && code + n > 90 || code + n > 122){
return String.fromCodePoint(code + n - 26)
// 대문자 Z 혹은 소문자 z를 넘어가면, 26을 빼주기(다시 A(a)로)
}else{
return String.fromCodePoint(code + n)
// n만큼 이동
}
})
.join('');
}
풀이
해당 문제를 풀기 위해선 아스키 코드표를 참고하여 코드를 작성해 나아가야 합니다.
왜냐하면 A에 1만큼 밀면 B. 즉, A+1은 B라는 말인데, 컴퓨터는 A를 65, B를 66, ..., Z를 90으로 표현하기 때문에, A를 먼저 65로 반환한 뒤에 1을 더해 66을 만들고 다시 이 66을 B라는 문자로 반환해줘야 하기 때문입니다.
따라서 일단 계산하기 전에, 받아오는 문자열을 전, 후로 자르고 붙여줘야 하고, 본격적인 문제 풀이는 map 함수를 사용해 하나씩 탐색하여 받아오는 n만큼 밀어주고(더해주고), 공백이라면 공백을 리턴해 줬습니다.
하지만 여기서 Z(z)에서 밀리면 다시 A(a)로 돌아가야 하는데요.
이는 조건문을 통해 만약 90(Z)이 넘거나, 122(z)가 넘어간다면, 우선 다 더하고 26만큼 뺀 값을 리턴해 줬습니다.
또한 조건 중 '90이 넘었을 때 다시 65로 되돌리는 경우'는 대문자일 때 해당되는 조건이기 때문에, '대문자(90보다 작거나 같으면서)이면서'란 조건도 추가하였습니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 체육복(JavaScript) (0) | 2022.08.04 |
---|---|
[Programmers] 최댓값과 최솟값(JavaScript) (0) | 2022.08.03 |
[Programmers] 2016년(JavaScript) (0) | 2022.08.02 |
[Programmers] 소수 찾기(JavaScript) (0) | 2022.08.02 |
[Programmers] 소수 만들기(JavaScript) (0) | 2022.07.29 |
댓글