[프로그래머스] 이상한 문자 만들기 (JavaScript)
https://school.programmers.co.kr/learn/courses/30/lessons/12930#
* 문제를 풀면서 특정 테스트케이스들에서 지속적으로 오류가 난다면 위 링크를 참고하세요! *
1. 이중 for문, 문자열 사용 풀이
function solution(s) {
let input = s.split(" ");
let answer = "";
for(let i = 0; i<input.length; i++){
for(let j = 0; j<input[i].length; j++){
if(j % 2 === 0) answer += input[i][j].toUpperCase()
else answer += input[i][j].toLowerCase()
}
if(i != input.length - 1) answer += " ";
}
return answer
}
코드 해설
- 입력받은 문자열을 공백문자를 기준으로 나누어 input배열에 넣어줍니다.
- 정답을 넣을 빈 문자열 answer를 생성합니다.
- 단어별로 홀짝을 구분하여 바꿔주어야 하므로 이중 for문을 통해 문자열에 2차원 배열로 접근합니다.
- 외부 for문은 input 요소, 즉 단어 하나를 순회함을 뜻하고 내부 for문은 단어 하나의 문자열 문자 하나씩 순회함을 의미합니다.
- 문자열의 문자 하나씩을 이차원배열의 두 인덱스를 활용하여 참조하고, 만약 인덱스가 짝수일 경우 toUpperCase()를 통해 대문자로 바꿔주고 홀수일 경우 toLowerCase()를 통해 소문자로 바꿔준 후 answer에 문자열로 더해줍니다.
- 단어 하나를 바꾸고 for문을 나갈 때, 단어 순서를 의미하는 i 변수가 input의 길이 - 1이 아니라면, 즉 마지막 단어가 아니라면 단어와 단어 사이에 띄어쓰기를 넣어줍니다.
2. 이중 for문, 배열 join()사용 풀이
function solution(s) {
let sum = [];
let words = s.split(" ");
for (let i = 0; i < words.length; i++) {
let answer = "";
for (let j = 0; j < words[i].length; j++) {
if (j % 2 === 0) {
answer += words[i][j].toUpperCase();
} else {
answer += words[i][j].toLowerCase();
}
}
sum.push(answer);
}
return sum.join(" ");
}
코드 해설
- 1번 코드와 비슷하지만, 정답 요소를 각각 문자열로 저장한 뒤 다시 배열로 저장해 join해주는 방법이 다릅니다.
- 외부 for문에서 내부 for문으로 진입하기 전, 단어 하나를 변환한 값을 저장할 answer 변수를 외부 for문이 순회할 때 마다 새로 초기화하여 생성해줍니다.
- 내부 for문을 통해 대/소문자로 변환된 문자들은 answer변수에 저장되고, 내부 for문이 종료되면 sum 배열에 answer를 push해줍니다.
- 과정을 반복하여 만들어진 배열은 join(" ")을 통해 공백 문자를 기준으로 문자열로 합해 반환해줍니다.
- 1번 풀이와 다르게 마지막 배열에 들어갈 공백 문자를 위한 예외 조건을 따로 설정해주지 않아도 되어 깔끔합니다.
3. map() 사용 풀이 (ChatGPT 참고)
function solution(s) {
let words = s.split(" ");
let result = words.map((word) => {
return word
.split("")
.map((char, index) => {
return index % 2 === 0 ? char.toUpperCase() : char.toLowerCase();
})
.join("");
});
return result.join(" ");
}
코드 해설
- 입력받은 문자열 s를 공백문자 기준으로 문자열로 생성하는 것은 동일합니다.
- map()을 사용하여 각 word를 다시 공백문자로 split해주고, 이를 다시 map()하여 각 char에 대해 대/소문자 변환을 한 뒤 join해 줍니다.
- 위와 같은 과정으로 만들어진 각 문자들을 return하여 result 배열에 문자열로 반환합니다.
- 최종적으로 만들어진 배열 result를 다시 공백문자로 join()하여 반환합니다.
- 처음에는 알기 힘들지만 천천히 살펴보면 어떤 과정인지 알 수 있습니다.
- 이중 for문 사용 코드와 해당 코드 모두 시간 복잡도가 O(N)으로, 성능 차이는 크지 않지만 가독성과 코드 간결성이 조금 더 우수하다고 합니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 문자열 내림차순으로 배치하기 (JavaScript) (0) | 2024.01.17 |
---|---|
[프로그래머스] 문자열 내 마음대로 정렬하기 (JavaScript) (0) | 2024.01.17 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (JavaScript) (0) | 2023.06.20 |
[프로그래머스] 나누어 떨어지는 숫자 배열 (JavaScript) (0) | 2023.06.18 |
[프로그래머스] 가운데 글자 가져오기 (JavaScript) (0) | 2023.06.18 |