가운데 글자 가져오기(Javascript)

·2022년 9월 18일
0
post-thumbnail

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

재한사항

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

입출력 예

sreturn
"abcde""c"
"qwer""we"

나의 풀이

function solution(s) {
    let halfLength = (s.length -1) / 2 
    return s.slice(halfLength,s.length % 2 === 1? halfLength +1 : halfLength +2);
}

slice()는 인수로 시작 인덱스, 끝나는 인덱스를 받아 준다. 이 인수로 인덱스에 맞는 요소를 잘라 준다. 유의할 점은 마지막 인덱스는 제거하고 인출을 하기 때문에,

arr = [1, 2, 3, 4]
arr.slice(0, 3)//[1,2,3]

이러한 결과를 나타내게 된다. arr[3]인 4를 제외하고 앞부분까지 잘라 주는 것이다.slice()는 배열을 자체를 잘라주는 게 아니라 배열의 복사본을 잘라준다는 특징도 있다.

그래서 일단 문자열 길이의 절반을 halfLength라는 변수에 담아 줬다. slice()는 소수점 숫자를 담아주면 자동으로 정수로 잘라 준다. 예를 들어 slice(2, 3)slice(2.5, 3)은 같은 값을 출력한다. 참고

따라서 첫 번째 인수는 문자열 길이의 절반을 쓰면 된다. 두 번째 인수는 짝수냐 홀수냐에 따라 달라지기 때문에 나머지를 체크해서 홀수라면 절반 값에 +1, 짝수라면 절반 값에 +2를 해줬다.

참고할 풀이 1

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

이 풀이는 참고를 위해서 가져오긴 했지만 권장되는 방법은 아니다. substr()이 일부 브라우저에서 지원하긴 하지만 사라지고 있는 방법이고, 언제 없어질지 모르므로 substr()를 쓰는 것을 지양하라고 한다. 대신 substring()을 쓰는 것이 권장된다. substring()slice()처럼 첫 번째 인덱스와 마지막 인덱스를 똑같이 받아 준다. slice()substring()은 첫번째 인수 < 두번째 인수이고 둘다 값이 자연수일 때에는 동일하지만, 다른 경우에는 살짝 용법이 달라질 수 있다.

substr()은 slice와 쓰는 방식이 살짝 다르다. slice는 시작과 끝의 인덱스를 인수로 받지만, substr는 시작 지점의 인덱스와 필요한 문자열의 길이를 받는다.

console.log("abcdef".substr(2,2));//cd
console.log("abcdef".slice(2,4));//cd

따라서 똑같은 cd를 인출하려면 인수를 다르게 줘야 하는 것이다.

여기서는 또한 Math.ceil을 이용해서 실수를 정수로 바꿔 줬다. 이 함수는 주어진 숫자보다 크거나 같은 수 중 가장 작은 수를 반환한다. 이것과 비슷한 함수는 Math.floor이 있는데, 주어진 숫자보다 작거나 같은 수 중 가장 큰 수를 반환한다. 예를 들어, 이런 식이 될 수 있다.

console.log(math.ceil(5.6))//6
console.log(math.ceil(5.6))//5

둘다 정수로 만들어주는 값이지만 결과값이 살짝 달라진다. 하지만 내가 했던 것 처럼 정수로 굳이 안 만들고

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

이런 식으로 써도 동일한 결과가 나온다.

참고할 풀이 2

function solution(s) {
    const mid = Math.floor(s.length/2);
    return s.length %2 === 1 ? s[mid] : s[mid-1]+s[mid];
}

이 풀이는 절반값을 구해준 후 정수로 만들어 준 것까지는 동일하지만, slice를 안 쓰고 문자열을 잘라 줬다. 홀수라면 s의 인덱스로 중간값을 줬고, 짝수라면 s의 인덱스 중간값 -1과 중간값을 더해 줬다. slice보다 간결한 방식인듯 하다.

profile
전 이것도 몰라요

0개의 댓글

관련 채용 정보