[Level 1] 이상한 문자 만들기
글 작성자: NoHack
728x90
문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 조건
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
문제 풀이
const solution = (s) => {
// 문자열을 단어들로 분할
let words = s.split(' ');
// 각 단어를 순회하면서 짝, 홀수 인덱스 변환
words = words.map((word) => {
// 각 단어도 배열로 만든 후 처리하면 [T, r, Y], [H, e, L, l, O] 이런 식으로 만들어 짐
// 그렇기 때문에 마지막에는 join으로 합쳐 TrY, HeLlO 이런 식으로 만들어 줘야 함
return [...word]
.map((char, index) => {
if (index % 2 === 0) return char.toUpperCase();
else return char.toLowerCase();
})
.join('');
});
// 변환된 단어들 사이사이 공백을 껴서 합침
return words.join(' ');
};
const solution2 = (s) => {
return s.toUpperCase().replace(/(\w)(\w)/g, (a) => a[0] + a[1].toLowerCase());
};
const inputs = ['try hello world'];
inputs.forEach((input) => console.log(solution(input)));
저는 두 가지 방법으로 문제를 해결했습니다. 첫 번째는 문자열을 단어들로 잘라 각 단어를 순회하며 처리한 방식이고, 두 번째는 정규 표현식으로 간단하게 처리한 방식입니다. 주석을 많이 달아놔서 설명이 필요한 부분이 많아 보이지는 않아 몇 가지 문법과 메소드 정도만 언급하겠습니다.
...은 스프레드 연산자(Spread Operator)로서, 배열이나 객체 또는 유사 배열의 요소를 펼쳐 배열로 만들어 주는 연산자입니다. 저는 문자열을 문자 단위로 잘라 배열로 변환할 때 주로 Array.from을 사용했었는데, 이 연산자를 사용하면 더욱 간단하게 만들 수 있습니다. 그리고 toUpperCase와 toLowerCase는 문자열 프로토타입에 정의된 메소드로 각각 문자열을 대문자와 소문자로 변환해 줍니다.
그리고 정규 표현식으로 처리한 함수는 이런 식으로 구현했습니다. 문자열을 먼저 전부 대문자로 변경한 다음 매칭 패턴을 (\w)(\w)로 설정하여, 이 패턴과 일치하는 부분에 대해 첫 글자는 그대로 두면서 두 번째 글자를 소문자로 변환하도록 했습니다. 패턴 문자 \w는 임의의 문자 한 글자를 의미합니다. 그렇기 때문에 (\w)(\w)라 함은 임의의 문자 두 개가 붙어있는 것을 의미합니다.
정규 표현식을 알고 있다면 문자열을 처리할 때 정말 간편하게 다룰 수 있습니다.
'📝 문제풀이 > 프로그래머스' 카테고리의 다른 글
[Level 1] 시저 암호 (0) | 2022.02.25 |
---|---|
[Level 1] 약수의 합 (0) | 2022.02.25 |
[Level 1] 자릿수 더하기 (0) | 2022.02.25 |
[Level 1] 자연수 뒤집어 배열로 만들기 (0) | 2022.02.25 |
[Level 1] 정수 내림차순으로 배치하기 (0) | 2022.02.25 |
댓글
이 글 공유하기
다른 글
-
[Level 1] 시저 암호
[Level 1] 시저 암호
2022.02.25 -
[Level 1] 약수의 합
[Level 1] 약수의 합
2022.02.25 -
[Level 1] 자릿수 더하기
[Level 1] 자릿수 더하기
2022.02.25 -
[Level 1] 자연수 뒤집어 배열로 만들기
[Level 1] 자연수 뒤집어 배열로 만들기
2022.02.25