본문 바로가기
알고리즘

[항해99][프로그래머스] 가운데 글자 가져오기 in Javascript

by lucian 2022. 7. 15.

문제

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

 

제한사항

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

입출력 예

s return
"abcde" "c"
"qwer" "we"

 


내가 푼 풀이

function solution(s) {
    let strLength=s.length;
    let start=Math.round(s.length/2)-1;
    
    if(strLength%2==1){
        return s.slice(start,start+1)
    }
    else{
        return s.slice(start,start+2)
    }
}

문자열을 쪼갤 때 홀수와 짝수가 쪼개는 방법이 다르므로 if문을 통해 구현한다.

 

문자열이 홀수일 때, 문자 하나를 출력한다. ("abced"의 중간 값은 "c")

반으로 쪼갠 것의 반올림 -1이 시작 값이다.(why? 반으로 쪼개면 N.5가 나오는데 인덱스는 소수를 안받기 때문에)

예를 들어, 문자열 "abcde"의 중간 index는 2이다.

5/2 =2.5 인데 2를 얻기 위해선 반올림 후 -1을 해줘야한다.

 

javascript - 올림,반올림,내림 함수

 - 올림함수 :  Math.ceil()

 - 반올림함수 : Math.round()

 - 내림함수 : Math.floor() 

 

문자열이 짝수일 때, 문자 두개를 출력한다.("abcd"의 중간 값은 "bc")

반으로 쪼갠 것의 반올림 -1이 시작값이다.(why? 4/2의 반올림은 2이기 때문에)

예를 들어, 문자열 "abcd"의 중간 index는 1,2이다.

 

이제 문자열 쪼개기 함수를 알아야한다.

javascript에서 문자열을 인덱스로 쪼개는 함수는 slice(n,m)와 substring(n,m)이 있다.

이 함수들의 결과값은 같다. 기냥 취향차이인듯 하다. 

결과로는 n부터 m-1까지 가져와줘! 라는 뜻이다.

즉 "abcde".slice(2,3) = "c" ( 2부터 3까지 즉 2만 가져와줘!)

    "abcd".slice(1,3)="bc" (1부터 3까지 즉 1,2만 가져와줘!)

 

로 이해하면 된다. 여기서 slice함수 대신 substring함수를 써도 동일하다.

https://codechacha.com/ko/javascript-extract-words-from-string/

 

JavaScript - 문자열에서 문자 또는 단어 추출, 4가지 방법

문자열 안의 문자 또는 단어를 추출하는 4가지 방법을 소개합니다. charAt()으로 특정 문자 1개를 추출하거나 substring(), slice()로 특정 범위의 문자열을 추출할 수 있습니다. 또는, split()으로 어떤 구

codechacha.com

문자열 쪼개는 함수들의 자세한 설명은 위 링크를 통해 확인

 

 


남이 푼 풀이 (가장 많이 푼 풀이)

function solution(s) {
    return s.substr(Math.ceil(s.length/2)-1, s.length%2==0 ? 2:1)
}

 

나의 코드와 다른 것은 substr함수와 if문을 삼항연산자로 사용했다는 점이다.

나는 함수를 최대한 덜 불리기 위해 변수를 설정했으나 여기는 코드의 간결함을 위해 변수 설정을 하지 않았다.

 

먼저 substr 함수를 보자면

 

내가 썼던 slice()와 strstring()함수와는 조금 다르다.

substr(n,m)함수는 n부터 갯수m까지만 출력해줘! 라는 뜻이다.

예를 들면 매우 쉽다.

"abcde".substr(2,1) ="c" 이다. 즉 2부터 문자 하나를 출력해줘! 라는 소리이다.

 

n은 나와 동일하다.

m은 삼항연산자로 s가 짝수문자열이면 2를, 홀수문자열이면 1을 넣어준다.(why? 짝수문자열의 중간값은 2개이고 홀수는 1개이기 때문에)

 

 

 

 

 

 


- str.slice(n,m)
- str.strstring(n,m)

> slice와 substring은 m이 인덱스 개념


- str.substr(n,m)
> substr은 m이 갯수 개념

댓글