ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Level 1 | 가운데 글자 가져오기_Slice() vs Substring()
    Coding Test/Programmers Level 1 2020. 3. 26. 11:50

    문제 설명

    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
    단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

    제한 사항

    s는 길이가 1 이상, 100이하인 스트링입니다.


    코드

    // if-else, slice()
    const solution = s => {
    
        const length = s.length;
        
        if (length % 2 === 1) {
            return s[Math.floor(length / 2)]
        } else {
            return s.slice(length / 2 - 1, length / 2 + 1)
        }
        
    }
    
    // 삼항 연산자, substring()
    const solution = s => {
    
        return s.length % 2 === 1
            ? s[Math.floor(s.length / 2)]
            : s.substring(s.length / 2 - 1, s.length / 2 + 1)
    
    }

    풀이

    if-else문과 삼항 연산자는 기능이 유사하기 때문에 둘 중 편한 것을 사용하면 된다.

    이 문제의 요구사항은 문자열의 길이가 홀수와 짝수일 때를 구분해서 가운데 글자를 추출하는 것이다.

    문자열의 길이가 홀수일 때는 문자열 전체 길이를 2로 나누어준 후 버림을 한 수 번째의 요소를 s 문자열에서 찾아내서 반환하면 된다.

     

    반대로 문자열의 길이가 짝수일 때는 2개의 문자열을 반환해야 하기 때문에 slice 또는 substring 메소드를 사용해야 한다.

    메소드 모두 (startIndex, [endIndex])를 인자로 취하는데, endIndex의 직전 요소까지 추출하기 때문에 그 점에 유의할 필요가 있다. 문자열의 길이가 짝수일 때 길이를 2로 나누면 추출해야 하는 두 번째 문자의 인덱스가 된다. 따라서 거기서 1을 뺀 인덱스부터 1을 더한 인덱스까지 문자를 추출해야 원하는 답을 얻을 수 있다.


    Slice() vs Substring()

    메소드는 기능적으로 거의 동일하지만 몇 가지 다른 점이 있다.


    ① 인자 자동 계산

    substring 메소드는 인자 (5, 2)와 (2, 5)에 대해서 같은 결과를 반환하는데

    그 이유는 startIndex가 endIndex보다 큰 경우 그 둘을 바꿔서 연산하기 때문이다.
    반면에 slice 메소드는 그러지 않기 때문에 startIndex가 endIndex 보다 큰 경우 "" 빈 문자열을 반환한다.


    ② NaN, 음수 처리

    substring 메소드는 NaN과 음수를 모두 0으로 처리한다. 따라서 (-5, 2)와 같은 인자가 주어지며 (0, 2)로 변환해서 처리하게 된다.
    slice 메소드도 NaN은 0으로 처리하지만 음수의 경우 문자열의 뒤쪽부터 인덱스를 계산하게 된다.

    단, 음수의 경우 문자열의 가장 마지막 문자의 인덱스가 -1이 된다. 따라서 (-5, -1)의 인자가 들어간 경우 뒤에서 5번째 문자부터 2번째 문자까지 추출하게 된다.


     

    문제 출처: [https://programmers.co.kr/learn/courses/30/lessons/12903]

    댓글

Designed by Tistory.