[프로그래머스_JavaScript] 가운데 글자 가져오기 문제풀이

Yun's·2022년 1월 16일
0
post-thumbnail

🔔 해당 문제

💻 가운데 글자 가져오기 (클릭)


📖 문제 설명

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


🚫 제한사항

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

🤔 입출력 예



📝 풀이1


// Math.floor
function solution(s) {
    let str = '';
    if(s.length % 2 == 0) {
        str = s[s.length / 2 - 1] + s[s.length / 2];
    } else {
        str = s[Math.floor(s.length/2)];
    }
    return str;
}

이 문제를 풀기 위해서는
값을 정수로 바꿔주는 함수에 대해 알고 있어야 한다.

s.length를 2로 나눈 값이 짝수면 잘 나눠지겠지만
홀수인 경우에는 나머지 값이 생기게 되기 때문이다.

풀이1은 Math.floor()가 사용되었다.


만약 s.length를 2로 나눈 값이 0이 맞으면 (=짝수면)
[s.length를 2로 나눠서 -1한 값]이랑 +[s.length를 2로 나눈값]을
return하고 (=가운데 두 글자를 return)
아니면 Math.floor() 처리된 (s.length를 2로 나눈값)만
return 하라는 뜻이다.



🍒 참고하면 좋을 자료 🍒

📘 JavaScript Math.floor() Mozila (클릭)
📘 JavaScript Math Mozila (클릭)
📘 JavaScript 반올림(round), 올림(ceil), 내림(floor) 설명 (클릭)
📘 다른 분의 Math.floor() 풀이 (클릭)



📝 풀이2


// concat
function solution(s) {
    let str = '';
    if(s.length % 2 === 0) {
        str = str.concat(s[s.length/2 - 1]);
        str = str.concat(s[s.length/2]);
    } else {
        str = str.concat(s[Math.floor(s.length/2)]);
    }
    return str;
}

풀이1과 비슷한 맥락인데
concat()을 사용한 풀이 방법도 있었다.



🍒 참고하면 좋을 자료 🍒

📘 JavaScript .concat() Mozila (클릭)
📘 .concat()을 사용한 다른 분의 풀이 (클릭)




📝 풀이3


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



프로그래머스에 정답을 제출한 후에 본 다른 분의 풀이다.
보고 감탄했는데 댓글에
.substr()에 대한 Warning을 달아주신 분이 계셨다.

무슨 소리인가 싶어서 찾아봤더니
새로운 ECMAScript 코드를 작성할 때는
해당 기능을 사용하거나 존재함을 가정해선 안된다고 한다.


'쓰길 권장하지 않는 method들도 알아볼 필요가 있겠군,,'이라
느꼈던 순간이었다.



🍒 참고하면 좋을 자료 🍒

📘 JavaScript .substr() Mozila (클릭)
📘 JavaScript의 타입과 자료구조 Mozila (클릭)
: 추가로 알아두면 좋을 문자열의 타입화(페이지 중간 'String 타입 中')



📝 풀이4


// 삼항연산자
function solution(s) {
    let half = Math.floor(s.length/2);
    return s.length % 2 == 0 ? s[half-1] + s[half] : s[half];
}

내가 제일 풀고싶었던 방법이다. 다른 문제 풀면서 삼항연산자 개념을 좀 알았다고 문제 풀 때 써보려고 했더니 끝내 응용에 실패해서 내 풀이는 아니지만,,,,!!!!

(알고리즘 문제를 보고
어떻게 풀어야겠다는 생각을 떠올리기 시작한 것만으로도
스스로에게 칭찬하며 위안 삼는 중,,🤭)

s.length를 2로 나눈 값이 0이 맞으면 (=짝수면)
[half(=2로 나눠서 Math.floor()처리된 값)에서 -1한 값]과
[half값]을 더한 값을 return하고 (=가운데 두 글자를 return)값
아니면 half 값만 return 하라는 뜻!



🍒 참고하면 좋을 자료 🍒

📘 다른 분의 Math.floor() + 삼항연산자 풀이 (클릭)

profile
우당탕탕 알다가도 모를 코딩 Life

0개의 댓글