[level1] 이상한 문자 만들기
코딩테스트 연습 - 이상한 문자 만들기
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을
programmers.co.kr
문제 설명 :
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백 문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
입력 : "try hello world"
출력 : "TrY HeLlO WoRlD"
접근 방법 :
function solution(s) {
const strArr = s.split();
let Arr = [];
strArr.forEach(str => {
let answer = '';
for(let i in str){
if(i === 0 || i % 2 === 0){
answer += str[i].toUpperCase();
}else{
answer += str[i];
}
}
Arr.push(answer)
});
return Arr.join().replace(/,/gi, " ");
}
내 첫 코드는 이랬다..
출력 값은 맞았지만, 채점을 했을 때 틀렸다고 해서 질문하기의 글들을 보고 그때 알았다.
그것은 바로, 공백 체크와 대소문자를 바꾸는 함수를 무조건 넣어야 한다는 것을 말이다.. 😥
그래서 오랜 고민 끝에 코드를 수정해보았다.
수정한 코드 :
function solution(s) {
let answer = "";
s.split(" ").forEach(ch => {
for(let i in ch){
answer += i % 2 === 0 ? ch[i].toUpperCase() : ch[i].toLowerCase();
}
answer += " "
});
return answer.slice(0, -1);
}
우선 s에는 "try hello world" 입력값이 들어온다.
여기서 공백 체크를 해야 하는데, 나는 split(" ")을 이용해 각각의 공백을 처리했다.
그러면 ["try", "hello", "world"] 이런 식으로 새 배열이 반환될 것이다.
반환된 배열들을 forEach() 구문을 통해 항목들을 하나씩 꺼내서 그 항목(문자열)을 가지고 for in문을 통해서 각각의 문자를 추출하고 삼항 연산자를 써서 짝수이면 대문자로 반환하고, 아니면 소문자를 반환한다.
반환되면, "TrY HeLlO WoRlD " 이렇게 값이 나올 것이다.
그런데 맨 마지막에 공백 문자가 들어가 있는 것을 볼 수 있다. 이 공백 문자를 제거해야만 문제를 통과할 수 있다.
마지막으로 return 값에 slice(0, -1)로 설정해서 첫 글자부터 마지막 이전의 글자까지만 반환하도록 해준다.
그러면 원하는 값 "TrY HeLlO WoRlD"이 출력될 것이다.