728x90
알고리즘 문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. |
처음에 이 문제를 풀 때 주어진 문자열 s를 모두 대문자로 변경한 뒤, 홀수번째 알파벳을 toLowerCase() 함수와 replace() 함수를 사용하여 바꾸는 방법을 시도하였다. 그 결과, 몇몇 케이스에서 실패하는 경우가 발생했는데, 원인을 찾아본 결과 replace() 함수를 사용할 때 중첩 루프 문제가 발생한다는 것이었다. 중첩루프가 뭔지 아직 정확히 이해하지는 못했지만 jeep, cool과 같이 같은 단어가 연속으로 나왔을 때 발생하는 문제였다. 그래서 새로운 방법으로 작성한 코드에 대해서 리뷰해보고자 한다.
// 이상한 문자열 만들기
function solution(s) {
// s를 소문자로 먼저 변환
s = s.toLowerCase();
var answer = '';
// s를 공백으로 나눈 변수 words 생성
let words = s.split(" ");
// words 길이만큼 반복
for (let i = 0; i < words.length; i++) {
// 개별 단어를 저장할 word 생성
let word = "";
// words의 개별 단어의 길이만큼 반복
for (let j = 0; j < words[i].length; j++) {
// 인덱스가 짝수라면 대문자로 변환해서 word에 저장
if (j % 2 === 0) {
word += words[i][j].toUpperCase();
// 그렇지 않으면 그대로 word에 저장
} else {
word += words[i][j];
}
}
// words의 마지막 문자가 아닐 대 word + 공백, 아니면 그냥 word를 더함
answer += (i < words.length - 1) ? (word + " ") : word;
}
return answer;
}
위의 코드는 word라는 새로운 변수를 만들어서, words의 짝수 인덱스에 위치한 값들은 대문자로 변환하고, 그렇지 않은 값들은 그대로 word에 더하는 방식으로 진행되었다. 그리고, 주어진 단어의 띄어쓰기가 유지되어야 하기 때문에, words 문자열의 마지막 문장이 아니면 word + " "(띄어쓰기)하는 방식으로 answer에 추가하는 방법을 사용하였다.
이 문제를 거의 한 시간 이상 고민했는데.. 이렇게 쉽게 풀 수 있다는 사실에 허탈하기도 했지만.. 많은 것을 배운 문제라고 생각한다.
728x90
'[항해99] TIL' 카테고리의 다른 글
9일차 (알고리즘5) (0) | 2023.08.24 |
---|---|
8일차 (알고리즘4) (0) | 2023.08.22 |
2주차 WIL(ES6 문법) (0) | 2023.08.22 |
[항해99] 6일차(알고리즘2) (0) | 2023.08.19 |
[항해99] 5일차(알고리즘1) (0) | 2023.08.18 |