728x90
반응형
24년 12월 19일
해결한 문제 갯수: 8
문제 설명
문제 분석
- 공백은 그대로 유지
- 알파벳만 이동 (대/소문자 구분)
- 밀어내는 거리 n은 1 이상 25 이하
- 문자열 길이는 8000 이하
첫 번째 접근 : 문자 코드를 이용한 방법
function solution(s, n) {
return s.split('').map(el => {
if(el === ' ') return el
else {
const target = el.charCodeAt() + n
const [z, Z] = ['z'.charCodeAt(), 'Z'.charCodeAt()]
if((el === el.toLowerCase() && target > z) ||
(el === el.toUpperCase() && target > Z)) {
return String.fromCharCode(el.charCodeAt() + n - 26)
}
return String.fromCharCode(el.charCodeAt() + n)
}
}).join('')
}
1) 빈 문자열을 그대로 반환합니다.
2) charCodeAt()을 사용해 문자를 아스키코드로 변환합니다.
- 변환한 코드에 n을 더합니다.
- 찾고자 하는 아스키 코드를 String.fromCharCode()를 사용해 문자로 변환합니다.
3) 범위 처리
- 소문자 'z'(122)와 대문자 'Z'(90) 초과 시 처리합니다.
- 알파벳 26자를 고려한 순환 구현합니다.
두 번째 접근: 문자열 반복을 이용한 방법
function solution(s, n) {
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.repeat(2)
const lower = upper.toLowerCase()
return s.split('').reduce((answer, l) => {
if(l === ' ') answer += l
else if(l === l.toLowerCase()) {
answer += lower.slice(lower.indexOf(l) + n, lower.indexOf(l) + n + 1)
}
else answer += upper.slice(upper.indexOf(l) + n, upper.indexOf(l) + n + 1)
return answer
}, '')
}
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
[프로그래머스] [1차] 비밀지도 (1) | 2024.12.21 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 (0) | 2024.12.20 |
[프로그래머스] 부족한 금액 계산하기 (1) | 2024.12.18 |
[프로그래머스] 외계어 사전 (0) | 2024.12.17 |
[프로그래머스] 숨어있는 숫자의 덧셈 (2) (0) | 2024.12.17 |