프로그래머스 Level1 - 가운데 글자 가져오기

Kim Jelly·2020년 9월 24일
0

회사에서 업무 한가할 때 틈틈히 코딩 문제 푸는 중, 오늘은 몇개까지 풀 수 있을까?

Leverl1 - 가운데 글자 가져오기

<문제>

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

<제한사항>

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

<입출력 예시>

<내가 푼 문제 풀이>

내가 풀었다 말하기 참...민망하다

  • 문제를 보면 짝수 일땐 두글자 반환, 홀수 일때는 1글자 반환이기 때문에 if문을 활용해서 하고자 했다.
  • 문자열에 대한 100% 이해가 없었는지, 배열과 똑같이 index 값으로 확인가능한 부분이 긴가민가 했다. 그래서 다시한번 찾아보고 확인했다.
  • 함수 호출 인자 값으로 문자열을 입력시 해당 문자열의 가운데 인덱스 값뿐만 아니라 인덱스 값에 들어있는 값을 출력해야한다.
  • 짝수, 홀수는 s.length % 2 나머지 값을 활용해서 해야지!
  • 문제는 그 이후 어떻게 해야 가운데의 인덱스 값을 추출하죠? .............멍....
function solution(s) {

    if (0 === s.length % 2) {
    } else {

    }
    
    return answer;
}

solution("kamill");

위 상태로 한참을...1시간... 2시간 계속 가운데 인덱스 값을 추출할 수 있는 메소드도 검색도 해보고 이래저래 지지고볶다가 정말 ...모르겠다

  • 가운데 인덱스 값이니까 글자 길이에 나누기 2를 하면 중앙 위치 값을 얻을 수 있지 않을까
  • 근데 그렇게 하더라도 문자열 출력이 아닌 인덱스 값인 숫자만 출력될 꺼 같은데?
    바보 같은 생각이었다. 배열에 대해 제대로 공부 안한 티가 났다..

그렇게 또 1시간....결국 나는 검색의 힘을 빌렸다.
가운데 글자 가져오기 치니까 정말 많이 나오더라..

거기서 알게된 concat 메서드

  • conscat : 매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다. (출처 : MDN)

빈 문자열을 가지고 있는 변수를 만들고, 그 안에 배열을 호출하는 문법대로 s[인덱스값]을 넣어줬으면 됬는데 거의 다 생각해놓고 중간에 포기한 격이 됬다

😂<검색을 통해 해결한 풀이>

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

solution("kamill");
  • Math.floor : 소수점 이하를 버림한다.

근데 이렇게 해결하고 let answer = ''; 이걸 지우고 if문 안에서 선언했더니 오류가 났다.

😢<let 사용시 오류>

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

solution("kamill");

ReferenceError [Error]: Cannot access 'answer' before initialization

오류가 난 이유는 아마도 hoisting 관련이지 않을까 생각하고 있다.

  • 내맘대로 이해하기 hoisting : 변수 및 함수 선언이 되기 전에 호출해도 오류 없이 코드가 실행되는 것

그래서 var를 한번 사용해봤는데.. 이번엔 또 새로운 오류

😢<var 사용시 오류>

function solution(s) {
    if (0 === s.length % 2) { // 짝수
           var answer = answer.concat(s[s.length/2 -1]); 
           answer = answer.concat(s[s.length/2]);
    } else { // 홀수 
        answer = answer.concat(s[Math.floor(s.length/2)]);
    }
    
    return answer;
}

TypeError [Error]: Cannot read property 'concat' of undefined

아무래도 저렇게 변수 선언과 함께 concat 메소드를 사용하는게 문제인 듯 하다.
하지만 아직 잘 이해가 가지는 않는다. 역시 혼자하는 공부는 어렵다.

이번 문제에 대한 다른 사람의 풀이는 봐도 어렵고 처음 보는 코드가 많이 보였다.
계속 느끼지만, 이거 Level1 초보자 분들만 푸는거...맞나? ...🤣
난 대체 얼마나 생초보인거지..

출처

프로그래머스 - 가운데글자 가져오기
바닐라코딩 - prep Guide

profile
꾸준히, 오래도록

1개의 댓글

comment-user-thumbnail
2020년 11월 12일

(속닥속닥) 프로그래머스 알고리즘 문제 레벨 나눈 기준은 사실 저도 공감하지 못한다는.. 힘내세요!

답글 달기