문제 및 제한사항
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
**제한사항**
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
풀이 방법
예를 들어 "try hello world" --> "TrY HeLlO WoRlD" 처럼 출력시켜야 한다.
try, hello, world 처럼 각 단어 수의 짝수번째 알파벳을 대문자로, 홀수번째 알파벳을 소문자로 출력하면 된다.
이를 위해서 먼저 주어진 문자열을 공백을 기준으로 쪼개 배열을 만들어준다.
그렇다면 ["try", "hello", "world"] 이 들어 있다.
문제대로 하려면 첫 번째 글자를 0번째 인덱스로 보아 짝수처리 해야 하니 t, y / h, l, o / w, r, d는 대문자가 되어야 한다.
배열 안의 문자열들을 또 한 번 쪼개준다.
"t", "r", "y" 이런 식으로 쪼개져 있을 때, for문을 돌려 0이거나 짝수일 경우에는 toUpperCase()로 대문자를 만들어준다.
한 단어의 모든 알파벳이 다 빈 문자열에 들어가고 나면 공백이 들어가야 한다.
따라서 for문 밖에 공백을 넣어주면 "TrY HeLlO WoRlD " 의 형태가 된다.
마지막에 공백은 삭제해야 한다. 이를 위해서 slice를 사용해 맨 마지막 공백을 삭제해준다.
answer.slice(0, -1) 로 0번째 인덱스에서 -1번째 인덱스를 삭제하거나,
answer.substring(0, answer.length-1)로 0번째 인덱스부터 마지막 -1 번째 인덱스를 구해 가져올 수 있다.
처음에는 이 생각을 못하고 그냥 trim, trimEnd를 쓰면 되지 않나 계속 고민했는데
문자열이 계속 더해지는 거라서, trim으로 해결되지 않는 걸로 이해했으나 아직 제대로 이해가 되지 않아 질문을 남겨뒀다.
혼자 공부하는 건, JS로 코테 하는 건 이런 부분에서 힘들다 ㅠ_ㅠ...
코드
function solution(s) {
let sWord = s.split(" ");
let answer = "";
for (let i = 0; i < sWord.length; i++) {
let sAlpha = sWord[i].split("");
for (let j = 0; j < sAlpha.length; j++) {
if (j === 0 || j % 2 === 0) {
answer += sAlpha[j].toUpperCase();
} else {
answer += sAlpha[j].toLowerCase();
}
}
answer += " ";
}
return answer.slice(0, -1)
}
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 시저 암호 (0) | 2023.04.12 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 예산 (0) | 2023.04.12 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 행렬의 덧셈 (0) | 2023.04.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 3진법 뒤집기 (0) | 2023.04.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 약수의 개수와 덧셈 (0) | 2023.04.10 |