2024. 8. 20. 12:52ㆍ[Node.js_6기 본캠프 TIL]
▶ 알고리즘 코드카타(JavaScript) - 이상한 문자 만들기
1) 주어진 코드
function solution(s) {
var answer = '';
return answer;
}
2) 조금 슬픈 이야기
예시만 보고 for문 하나만 걸면 되는 거 아닌가? 라는 속 편한 생각을 했다. 일단 대문자/소문자로 치환하는 함수를 모르기 때문에 구글링부터 시작. toUpperCase()와 toLowerCase()의 사용법을 찾으면서 비슷한 문제를 푼 사람들의 풀이가 살짝 보였다. 뭔가 잘못되었음을 깨달았지만, 애써 흐린눈을 하고 처음부터 하나씩 풀어보기로 했다. 오늘 강의에서 분명 알고 있는 것 같은 함수들도 노트에 써보려니 완성하지 못하는 걸 보고 내 실력의 얄팍함에 충격 받았기 때문에 되는 데까지는 어떻게든 풀어보기로 했다.
function solution(s) {
var answer = '';
for(let i = 0; i < s.length; i++){
if(i%2 === 0){
answer += s[i].toUpperCase();
} else {
answer += s[i].toLowerCase();
}
}
return answer;
}
처음 생각했던 코드를 완성했다. 테스트 케이스 1개는 무사 통과되는 것을 보고 제출했으나... 케이스가 늘어나자 줄줄이 실패가 떴다. 아무래도 '공백을 기준'으로 변환해야 하는 걸 놓쳐서 발생한 문제 같았다.
그러면 단어별로 쪼개야 하는데, 단어의 글자를 하나씩 쪼개본 적은 있어도, 공백을 기준으로 쪼개본 적은 없어서 또 한참 고민했다. split('')로만 써오던 걸, split(' ')으로 써주면 공백 기준으로 분리할 수 있었다. 역시 원리를 알고 써야 응용이 되는데, 쉽지 않다.
function solution(s) {
let arr = s.split(' ');
let str = '' ;
let answer = '';
for(let i = 0; i < arr.length; i++){
str = arr[i];
for(let j = 0; j < str.length; j++)
if(j%2 === 0){
answer += str[j].toUpperCase();
} else {
answer += str[j].toLowerCase();
}
}
return answer;
}
이번에는 테스트 케이스도 통과하지 못했기 때문에, 눈 딱 감고 다른 풀이들을 정독해보기로 했다. 놀랍게도 split 과정에서 사라진 띄어쓰기를 놓치고 있었다는 것을 깨달았다.
3) 풀이
function solution(s) {
let arr = s.split(' '); // 공백을 기준으로 분리된 단어들을 배열 형태로 저장
let str = '' ; // 분리된 단어들을 하나씩 가공할 때 쓸 변수 선언
let answer = '';
for(let i = 0; i < arr.length; i++){ // 배열의 길이 만큼 반복
str = arr[i]; // s를 분리한 배열, arr의 i 번째 단어를 str이라고 한다
for(let j = 0; j < str.length; j++) // 단어 길이 만큼 반복
if(j%2 === 0){
answer += str[j].toUpperCase(); // 짝수 자리면 대문자로 변환하여 answer에 넣기
} else {
answer += str[j].toLowerCase(); // 홀수 자리면 소문자로 변환하여 answer에 넣기
}
answer += " "; // arr 선언 과정에 사라진 띄어쓰기 다시 넣어주기
}
// for문에서 나오는 과정에 마지막 단어 뒤에 불필요하게 붙은 띄어쓰기 없애주기
answer = answer.substr(0,answer.length-1);
return answer;
}
참고 링크: https://frontend-manchoon.tistory.com/41
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[Node.js_6기 본캠프] CH 2. 개인과제 트러블 슈팅_0822 (0) | 2024.08.22 |
---|---|
[Node.js_6기 본캠프] CH 2. 개인과제 트러블 슈팅_0821 (0) | 2024.08.21 |
[Node.js_6기 본캠프] Today I Learned_0819 (0) | 2024.08.19 |
[Node.js_6기 본캠프] Today I Learned_0816 (0) | 2024.08.16 |
[Node.js_6기 본캠프] Today I Learned_0814 (0) | 2024.08.14 |