[TIL] 240325 (문자 반복 출력, 제곱수 판별, 모음 제거)

·2024년 3월 25일

TIL

목록 보기
6/268

문자 반복 출력하기

프로그래머스 문제 : 문자열 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() : 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.

우선 문자열을 스프레드 연산자를 통해 배열로 변환시켜주고, 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() 메서드와 함께 사용하면 문자열에서 일치하는 부분을 탐색하고, 그 부분을 대체 문자열로 바꾼다.
    • g : 전체 모든 문자열을 변경 global

정규식 검색 기준 패턴

필요한 패턴을 찾았으나 그 외 패턴들도 알아둘 필요가 있어 이 김에 정리한다.

  • |
    -> OR , a|b
  • []
    • 괄호안의 문자들 중 하나. or 처리 묶음 보면 된다.
    • /abc/ : "abc"를 포함하는
    • /[abc]/ : "a" 또는 "b" 또는 "c" 를 포함하는 (이 문제에서 쓰인 패턴)
    • [다-바] : 다 or 라 or 마 or 바
  • [^문자]
    • 괄호안의 문자를 제외한 것
    • ex) [^lgEn] => "l" "g" "E" "N" 4개 문자를 제외
    • ※ 대괄호 안에서 쓰면 제외의 뜻, 대괄호 밖에서 쓰면 시작점 뜻
  • ^문자열
    -> 특정 문자열로 시작 (시작점) ex) /^www/
    문자열>특정문자열로끝남(종착점)ex)/com-> 특정 문자열로 끝남 (종착점) ex) /com/

이를 통해 이 문제를 풀면 이런 풀이를 낼 수 있다.

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}
profile
웹 프론트엔드 개발자

0개의 댓글