코딩테스트/Programmers (프로그래머스)
[프로그래머스] 시저 암호 - Javascript (Lv.1)
지윤공원🌳
2021. 5. 6. 05:17
728x90
📖 문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
✔️ 제한조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
s | n | result |
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
💻 나의 코드
function solution(s, n) {
let answer = ''; // return할 값 answer 초기화
const alphSmall = 'abcdefghijklmnopqrstuvwxyz'; // 알파벳 소문자를 문자열로 초기화
const alphBig = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 알파벳 대문자를 문자열로 초기화
// s의 길이만큼 반복
for(let i=0; i<s.length; i++){
if(s[i] === " "){ // s[i]가 공백이면
answer += " "; // answer에 공백추가
continue; // continue를 통해 다음 반복으로 직행함
}
let change = s[i].toUpperCase(); // s[i]를 대문자로 바꾼 걸 change에 초기화
// 원래 s[i]와 대문자로 변환한 change가 다르면 (원래 소문자였으면)
// alphSmall에서 원래 s[i]의 위치를 구하고 n을 더한 후 26으로 나눈 인덱스의 값을 answer에 더한다
if(s[i] !== change) answer += alphSmall[(alphSmall.indexOf(s[i]) + n) % alphSmall.length];
// 원래 s[i]와 대문자로 변환한 change가 같으면 (원래 대문자였으면)
// alphBig에서 원래 s[i]의 위치를 구하고 n을 더한 후 26으로 나눈 인덱스의 값을 answer에 더한다
else answer += alphBig[(alphBig.indexOf(s[i]) + n) % alphBig.length];
}
return answer; // answer를 return
}
🎤 코드 설명
접근 방법 : 알파벳으로 이루어진 문자열을 초기화해두고 인덱스를 사용해서 answer의 값을 구합니다.
- 알파벳 소문자와 대문자를 각각 문자열 변수로 초기화해둡니다.
- s의 길이만큼 반복을 수행합니다.
- s[i]가 공백이라면 answer에 공백을 추가하고 continue를 통해 다음 반복으로 넘어갑니다.
- s[i]를 대문자로 변환한 것을 change변수에 넣어둡니다.
- 원래 s[i]와 change가 다를 경우에는 (원래 s[i]는 소문자)
- alphSmall에서 원래 s[i]의 위치를 구하고 n을 더한 후 26으로 나눈 인덱스의 값을 answer에 더해줍니다
- 원래 s[i]와 change가 다를 경우에는 (원래 s[i]는 대문자)
- alphSmall에서 원래 s[i]의 위치를 구하고 n을 더한 후 26으로 나눈 인덱스의 값을 answer에 더해줍니다
- 반복문 종료 후에 answer를 return합니다.
📜 채점 결과
정확성: 100.0
합계: 100.0 / 100.0
💬 배운 것
- 처음에는 문자 하나하나를 아스키 코드로 변환해서 연산을 하려 했는데, 굳이 그럴 필요 없이 인덱스만 사용해도 되겠단 생각이 들어서 위의 코드를 작성하게 되었습니다. 처음에 생각한 아이디어 외의 다른 풀이 방법도 생각해보면 효율적인 코드가 나올 거 같습니다.
- indexOf와 %연산자를 활용해볼 수 있었습니다.
코딩테스트 연습 - 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀
programmers.co.kr
728x90