프로그래머스 문제 : 문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.
웬만한 문제를 볼 때마다 반복문으로 해결하는 방법이 제일 빠르게 떠오르는 나는, 이번에도 역시 반복문을 두 번 사용하여 answer 변수에 i번째 문자열이 3번씩 들어갈 수 있도록 했다. 이렇게 해결하는 것에는 어려움이 없었다.
function solution(my_string, n) {
var answer = '';
for (let i=0;i<my_string.length;i++){
for (let j=0;j<n;j++) {
answer += my_string[i];
}
}
return answer;
}
문제를 해결은 했지만, 뭔가 더 좋은 방법이 있지 않을까 하고 다른 사람들의 풀이를 보니, 역시 더 간단한 방법이 있었다.
function solution(my_string, n) {
var answer = [...my_string].map(v => v.repeat(n)).join("");
return answer;
}
우선 문자열을 스프레드 연산자를 통해 배열로 변환시켜주고, map() 메서드를 통해 새로운 배열을 만들어 준 다음 각 요소들을 repeat() 메서드를 사용하여 반복시켜준다. 그리고 배열이기 때문에 join() 메서드를 통해 배열을 다시 문자열로 만들어준다.
계속 문제를 풀면서 기존에 알고 있었지만 문제 풀이에 활용을 못 했던 메서드들에 더 익숙해지고 새로운 메서드들도 익히며 익숙해져야겠다는 생각이 들었다.
프로그래머스 문제 : 어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다. 정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.
새로운 메서드를 배우게 되어 추가한다.
Math.sqrt() : 함수 인자로 값을 넘겨주면 루트 값을 반환한다. 만약 매개변수가 음수이면 NaN을 반환한다.function solution(n) {
return Math.sqrt(n) % 1 === 0 ? 1 : 2;
}
이 때 Number.isInteger() 함수를 사용해 정수인지 판별할 수도 있다.
function solution(n) {
return Number.isInteger(Math.sqrt(n)) ? 1 : 2;
}
프로그래머스 문제 : 영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
function solution(my_string) {
var vowers = ['a','e','i','o','u'];
return [...my_string].filter((item)=>{
for (let i=0;i<vowers.length;i++){
if (item.includes(vowers[i])){
return false;
}
}
return true;
}).join("");
}
풀긴 했지만 코드가 상당히 더럽고, 맞는 방법인지도 의구심이 들었다.
replace() 메서드와 함께 사용하면 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꾼다.필요한 패턴을 찾았으나 그 외 패턴들도 알아둘 필요가 있어 이 김에 정리한다.
- |
-> OR , a|b- []
- 괄호안의 문자들 중 하나. or 처리 묶음 보면 된다.
- /abc/ : "abc"를 포함하는
- /[abc]/ : "a" 또는 "b" 또는 "c" 를 포함하는 (이 문제에서 쓰인 패턴)
- [다-바] : 다 or 라 or 마 or 바
- [^문자]
- 괄호안의 문자를 제외한 것
- ex) [^lgEn] => "l" "g" "E" "N" 4개 문자를 제외
- ※ 대괄호 안에서 쓰면 제외의 뜻, 대괄호 밖에서 쓰면 시작점 뜻
- ^문자열
-> 특정 문자열로 시작 (시작점) ex) /^www/
문자열/
이를 통해 이 문제를 풀면 이런 풀이를 낼 수 있다.
function solution(my_string) {
return my_string.replace(/[aeiou]/g, '');
}