출처 - https://school.programmers.co.kr/learn/courses/30/lessons/12926
문제 설명
나의 풀이
function solution(s, n) {
//아스키코드를 이용해 밀린 값만큼 값을 수정해준다.
//아스키코드 : A = 65 / Z = 90 / a = 97 / z = 122
var answer = '';
for (let i = 0 ; i < s.length; i ++){
if (s[i] === " ") {
answer += " "
}
else{
//s 변수 내에 있는 i의 charCode를 표시해줌
let charCode = s.charCodeAt(i);
console.log(charCode)
// charCode가 대문자일때에 변경후에 90보다 크다면 -26을 해주어 Z였다면 다시 A로 갈수있게 만들어줌
if(charCode <= 90){
charCode += n;
if(charCode > 90){
charCode -= 26;
}
}
else{
//반복
charCode += n;
if(charCode > 122){
charCode -= 26
}
}console.log(charCode)
//String.fromCharCode()->아스키코드값을 문자로 변환해줌
answer += String.fromCharCode(charCode);
}
}
return answer;
}
아스키 코드를 이용해 문제를 풀었다 .
아스키 코드를 이용해 푸는 문제가 많으니 각 아스키코드의 알파벳 숫자를 외워 두도록 하자!
다른사람의 풀이
function solution(s, n) {
var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var lower = "abcdefghijklmnopqrstuvwxyz";
var answer= '';
for(var i =0; i <s.length; i++){
var text = s[i];
if(text == ' ') {
answer += ' ';
continue;
}
var textArr = upper.includes(text) ? upper : lower;
var index = textArr.indexOf(text)+n;
if(index >= textArr.length) index -= textArr.length;
answer += textArr[index];
}
return answer;
}
아스키코드없이 직접 알파벳배열을 선언해 인덱스 값을 이용하여 풀었다! 깔끔하고 보기도 좋은것같다. 아스키코드가 잘 기억 나지않을때에 사용하여도 좋을것같다.
그리고 continue를 사용해본적이없는데 continue를 사용하여 결과가 중복되지않게 한 부분도 감명깊다!!
번외
function caesar(s, n) {
var result = "";
// 함수를 완성하세요.
var alphabetArray = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",];
var splitArray = s.split("");
//indexOf 로 배열에서 인덱스를 알아낸 후 인덱스에 n을 더한다.
for(var i = 0 ; i < splitArray.length ; i++)
{
var mn = alphabetArray.indexOf(splitArray[i]);
splitArray[i] = alphabetArray[mn+n];
result = result + "" + splitArray[i];
}
return result;
}
너무 멋있는것같다. 열정도 대단하고 나는 생각이안나거나 로직이 안짜이면 금방포기해버릴것같은데 ...
물론 이분은 재미로 하신것같다만 , 이렇게라도 풀려는 노력을 가해야겠다 진짜광기
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 Lv.1 - 추억 점수 (0) | 2024.03.26 |
---|---|
[알고리즘] 프로그래머스 Lv.1 - 신고 결과 받기 (0) | 2024.03.24 |
[알고리즘]개인정보수집 유효기간(JS) (0) | 2024.03.12 |
[알고리즘] 프로그래머스 Lv.1 - 이상한 문자 만들기(JS) (0) | 2024.03.11 |
[알고리즘]프로그래머스 Level 1 - 소수 만들기(Js) (0) | 2024.03.08 |