반응형
제한 조건은 문자열 s에 n만큼 이동한 알파벳이 나오게 한다. 단, z의 경우 그 다음 다시 a로 돌아가야 된다.
문제를 본 순간 아스키 코드가 떠올랐다.
https://shaeod.tistory.com/228
ASCII Table - 아스키 코드표
(아스키코드를 알면 C/C++이나 Java 등으로 문자열 함수를 다루거나 파일 함수를 다룰때 도움이 됩니다.) 컴퓨터는 0과 1 숫자 밖에 모르기 때문에 문자도 숫자로 기억합니다. 이때, 어떤 숫자와 어
shaeod.tistory.com
아스키코드는 알파벳에 숫자는
대문자 : 65 ~ 90
소문자 : 97 ~ 122
그래서 문자열을 아스키코드로 변형 시켜준 뒤, + n을 해주고, 다시 문자열로 바꿔주면 되지 않을까라 생각했다. 그런데 조건을 어떻게 주어야할까에서 막혔었다.
function solution (s, n) {
return s.split("").map((el) =< {
//문자열 하나하나 봐야하기 때문에 배열로 만들어 주었다.
if(el === " ") {
//문자열 중에 빈 칸이 있다면 그 빈칸은 그대로 돌려준다.
return el;
//문자열이 z 혹은 Z라면 + n을 할 시 a로 넘어가게 해줘야된다.
})
}
if(String.fromCharCode(el.charCodeAt() + n) > 90)...
// Z는 90이다. 90을 넘긴다면 a가 97이기 때문에 소문자들도 다 잡히게 된다.
//그런데 착각하고 있었던 부분이 조건식의 문자열을 바꿔주는 메서드를 사용하면 그것이
//결과로도 이어지는 줄 알고 있었다
//무슨 뜻이냐면 만약 문자열을 대문자로 다 바꿔주는 el.toUpperCase()를 해준다면
//el이 바뀌는 줄 알았지만 조건식을 나오면 el은 아무 영향도 없었다.
그래서 if(el.toUpperCase().charCodeAt() + n > 90)
//문자열을 대문자로 바꿔주고 + n 을 해줬을 때, 아스키코드 Z에 해당하는 90을 넘긴다면
String.fromCharCode(el.charCodeAt() + n - 26);
//fromCharCode메서드는 아스키코드를 숫자로 바꿔준다.
//만약 n이 1이라면 91이 된다. 그리고 -26은 알파벳 총 숫자다. 빼주면 65 = A가 된다.
else {
String.fromCode(el.charCodeAt() + n)
//아닐 시에는 +n만 해주고 돌려준다.
}
조건 부분에서 많은 시간을 빼앗기고 빙빙 돌았던 문제다. toLowerCase()를 해주고, 122로 변경해줘도 답은 동일 하게 나온다.
조건 부분을 생각하는 것 그리고 그 부분을 따라가다 보면 답이 나오는데, 아직도 머리속에서 빙빙 돌 때가 많다. 많이 보고, 많이 검색하고, 많이 풀자.
function solution(s, n) {
return s.split("").map((el) => {
if(el === " ") {
return el;
}
return el.toLowerCase().charCodeAt() + n > 122
? String.fromCharCode(el.charCodeAt() + n - 26)
: String.fromCharCode(el.charCodeAt() + n)
}).join("");
}
반응형
'알고리즘문제' 카테고리의 다른 글
LeetCode 1528.Shuffle String (0) | 2021.11.21 |
---|---|
문자열 내 마음대로 풀어보기 - 프로그래머스 (0) | 2021.10.03 |
제일 작은 수 제거하기 - 프로그래머스 (0) | 2021.09.24 |
프로그래머스 - 행렬의 덧셈 (0) | 2021.09.20 |
프로그래머스 - 문자열 내림차순으로 배치하기 (0) | 2021.09.10 |