본문 바로가기
나의 개발일지/알고리즘 테스트

[프로그래머스 - Level 1] 가운데 글자 가져오기 (JS)

by stella_gu 2022. 7. 15.

나의 첫 알고리즘 코딩테스트 문제가 된 걸 축하한다


알고리즘이라 할 수 있는 건 제로초 유튜브 무료 강의 보면서 별 찍어본 게 처음이자 마지막이었는데... 새삼 느끼지만 이 강의 괜찮았던 것 같다 이번 주차에 끝까지 완강해보게써...
제로초 JS 유튜브 무료강의 링크


이게 중요한 게 아니라

다행히 이건 문제 설명이 친절해서 어떻게 접근해야할지 감은 왔다

악필이 죄는 아니잖아여...?


"단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다."에서 힌트를 얻어
단어 길이가 짝수인 경우와 홀수인 경우를 나눠 생각해봤다

1. 홀수인 경우(a = "abcde") : a.length/2 = 2.5이므로 내림을 한 3번째 자리 수를 하나만 가져와야 함.
2. 짝수인 경우(b = "fghi") : b.length/2 = 2로 딱 떨어지므로 2번째 자리부터 2개를 가져오면 됨.

일단 홀/짝을 판별하는 if문을 적었는데
특정 자리수부터 특정 개수만 가져오는 건 어떻게 하는 거지...?
함수를 잘 모르니까 해결하기 너무 힘들었다. 사고 회로의 정지가 와서 결구 구글 센세의 도움을 받기로 결정ㅠㅠ

▼ 오늘 의 함수 : substr()

문자열.substr(start, length) : 문자열 안에서 특정한 구간의 문자열을 추출 (start기점부터 length만큼)


'가운데 글자 가져오기'만 검색해도 방대한 양의 문제풀이 포스팅들이 존재했다
양심 상 로직을 다 보진 않고 함수 위주로 본 후 이름만 봐도 왠지 얘인 거 같아서 검색해보니 정답!

const a = "abcde";
const b = "asdf";

function solution(s) {
    var answer = '';
    if (s.length % 2 == 0) {
        answer = s.substr((s.length/2 - 1), 2);
    } else {
        answer = s.substr(Math.floor(s.length/2), 1);
    }
    return answer;
}

console.log(solution(a));  // 결과값 : c
console.log(solution(b));  // 결과값 : sd

console.log(solution("sparta"));  // 결과값 : ar
  • 짝수인 경우(b = "asdf") : b.length/2 = 2로 딱 떨어지므로 -1을 하여 2번째 자리(index 넘버는 1)부터 2개를 가져오면 됨.

→ 문자열.substr((s.length/2 - 1), 2);

  • 홀수인 경우(a = "abcde") : a.length/2 = 2.5이므로 내림을 한 3번째 자리(index 넘버는 2)를 하나만 가져와야 함.

  → 문자열.substr(Math.floor(s.length/2), 1);






다른 사람들은 어떻게 풀었을까

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

// 문자열 길이/2를 한 값을 올림하여 -1 : start
// (문자열 길이/2 == 0)이 True면, 즉 짝수이면 length는 2가 되고, False(홀수)면 1이 된다

띠용..

알고리즘은 수능 공부하듯... 많이 풀어봐야 아는 거구나...ㅎㅎㅎ

알고리즘 문제풀이의 궁극적 목표가 코테가 아닌 적당히 맛만 보고 'JS 함수 익히기!'로 잡는 게 맞는 거 같다..^^


  • 삼항연산자 : condition ? exprIfTrue : exprIfFalse
조건문 ? true일 때 실행할 식 : false 일 때 실행할 식

이거 유튜브에서 본 적 있는데 역시 보기만 하면 쓸 줄 모른다ㅠㅠ



잘 하고 있는 걸까





잘 하고 있는 걸겨..!



[참고] substr()

C.m.A API 이야기(Mokulsha!)

substr() 문자열에서 특정한 구간의 문자열을 추출한다. 문자열.substr(start, length) 1. length값은 가져올 길이값이며, 생략가능하다. 2. 두번째 매개변수인 length값이 음수값일 경우 빈 값을 반환한다. (l

chongmoa.com

[참고] round, ceil, floor

javascript 함수 round, ceil, floor ( 반올림, 올림, 내림 )

프로그램 언어가 틀려도 비슷한 구문, 함수는 존재합니다. 그리고 사용하는 이름도 얼추 비슷한데요. javas...

blog.naver.com