문제 설명 |
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. |
제한 조건 |
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. |
function solution(s) {
var answer = '';
let a = s.split(' '); //입출력 예에서의 a = 3
for (let j=0; j<a.length; j++) { //j는 단어별 구분
for (let k=0; k<a[j].length; k++) { //k는 단어의 문자별 구분
if (k%2 === 0) { //단어 별 문자의 번호가 짝수일때
answer += a[j][k].toUpperCase() //짝수는 대문자로 저장
} else { //단어 별 문자의 번호가 홀수일때
answer += a[j][k].toLowerCase() //홀수는 소문자로 저장
}
}
if (j<a.length-1){
answer += ' ' //단어별 끝날 때마다 띄어쓰기 입력
}
}
return answer;
}
이번 문제는 중첩반복문을 사용해 단어별로 홀, 짝수를 나누어 대,소문자를 구별하고,
적절한 곳에 띄어쓰기를 배치하는게 핵심이었다.
다른사람의 풀이중 map을 사용한 것이 있어 가져와 봤다.
function solution(s) {
let arr = s.split(" ");
return arr.map(v => {
let newStr="", num=0;
for(let str of v){
newStr += !(num%2)? str.toUpperCase(): str.toLowerCase();
num++;
}
return newStr; //맵함수의 for문마다의 반환값
}).join(" "); //맵함수 끝나는 지점, solution함수 반환값의 최종점
}
주어진 예시로 위 코드를 해석해 보자.
s = 'try hello world'
arr = s.split(' '); ====== arr = ['try', 'hello', wolrd']
newStr = '' 빈문자열을 선언해주고, num =0으로 초기 값을 설정해 준다.
for (let str of v) ====== 여기서 말하는 v는 arr의 요소들try, hello, world이고,
str은 요소하나씩 즉 try에서 t, r, y / hello에서 h, e, l, l, o / world에서 w, o, r, l, d이다.
먼저 try에 대한 반복문을 실행한다.
빈 문자열인 newStr에 num을 2로 나눈 나머지가 0(falsy)인지 1(truthy)인지 판별한다.
try에서 t에 대해 num이 0인데 앞에 !가 붙었으므로 true의 값을 진행한다. 여기선 str(t).toUpperCase()를 진행한다.
그걸 빈 문자열인 newStr에 저장한다. 그 후에 num값에 1을 더한다.
다음으론 r에대해 num이 1이므로 !1 = !true = false여서 str(r).toLowerCase()를 진행하고 또 num에 1을 더해준다.
마지막으로 y에대해 num이 2이므로 !0 = !false = ture여서 str(y).toUpperCase()를 진행하고 또 num에 1을 더한다.
여기서 v의 첫 값인 try가 끝났으므로 arr의 try가 TrY로 반환되어 바뀐다.
똑같이 다시 map메소드가 진행되고 newStr이 빈문자열이되고, num이 0이되며 단어별로 진행이되어
최종적으로 map함수가 끝났을때 arr = ['TrY','HeLlO','WoRlD']가 되는데,
여기에 .join(' ')함수를 사용하여 배열 요소사이에 띄어쓰기를 넣은 문자열이 최종적으로 함수의 반환값으로 반환된다.
'1차 공부 > 알고리즘' 카테고리의 다른 글
자연수 뒤집어 배열로 만들기 (0) | 2022.11.23 |
---|---|
자릿수 더하기 (0) | 2022.11.23 |
완주하지 못한 선수 (0) | 2022.11.23 |
수박수박수박수박수박수? (0) | 2022.11.23 |
서울에서 김서방 찾기 (0) | 2022.11.23 |