ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeKata] 프로그래머스 : 4.21(수), n진수 게임
    Algorithm 2021. 4. 21. 19:28
    반응형

    🥋 Ooooth!! (Level 2)

    카카오 문제 치고는 꽤 단순한 문제다. 0부터 n진수 숫자를 나열하면서, 해당 차례의 값을 개수(t)만큼 저장해줘야 한다.

     

     🧮 풀이

    function solution(n, t, m, p) {
      let strings = ''
      let stringNum = 0;
      let answer = '';
      let count = 0;
      
      while (count < t) {
        const target = strings[m*count + p-1];
          if (!target) {
            strings += stringNum.toString(n);
            stringNum++;
          }
        else {
          answer += target;
          count++;
        }
      }
      
      return answer.toUpperCase();
    }
    1. strings는 n진수 숫자를 쌓을 문자열, stringNum은 다음 저장해야할 n진수 숫자를 기억하기 위한 10진수 숫자이다.
    2. answer는 내 차례(m명 중 p번째)에 말해야하는 숫자이자 우리가 쌓을 정답 문자열, count는 게임의 라운드 수 개념이다.
    3. answer는 총 t번째까지 쌓아야 하므로, count를 t보다 작을때까지만 while 반복문을 순회한다.
    4. target 값이 해당 차례(count)에서 말해야하는 문자값이 될 것이다. 인덱스는 m*count(라운드)와 p-1(순서)를 고려했다.
    5. target이 undefined인 경우 strings가 부족한 것이다. 이 때는, strings에 새 n진수 숫자를 더하고, stringNum 기억값을 1 증가.
    6. target이 존재한다면, 이 값을 answer에 누적시킨다. 그리고, 다음 라운드 고려를 위해 count를 1 더한다.
    7. 최종적으로 누적된 answer를 반환하되, toString()의 10진법 이상은 소문자로 저장되므로 toUpperCase() 대문자 전환 처리한다.

     

    🖇 리뷰

    function solution(n, t, m, p) {
        var tubeT = Array.apply(null,Array(t)).map((a,i)=>i*m+p-1);
        var line = '';
        var max = m*t + p;
        for (var i =0;line.length <= max; i++) {
            line += i.toString(n);
        }
        return tubeT.map(a=>line[a]).join('').toUpperCase();
    }
    

    먼저, 튜브의 차례(인덱스)를 가진 tubeT 배열을 만들었다.

     

    다음으로, line 전체 문자열을 필요한 만큼 만들어준다. 여기선 max까지 for문을 돌았고, 이를 while문으로 수정할 수도 있겠다.

    최대로 필요한 길이는 m(전체인원) * t(횟수) + p(내 마지막 차례) 로 설정했는데, t-1까지 해도 무방할 것 같다. (마지막 p가 있으므로)

     

    그리고, tubeT 인덱스들을 맵핑하며, 각 인덱스에 해당하는 값을 line에서 가져온다.


    🥳 프로그래머스 Level2를 마무리하며..

    생각보다 면접볼 때 알고리즘을 풀었던 부분에 대해서도 질문이 많이 들어왔다. (그만큼 인상깊게 봐주셨던 거라 생각된다.)

    또한, 레벨2 정도의 알고리즘 경험이 다수의 코딩테스트에 큰 도움이 되었다.

     

    프로젝트나 취업준비 중간중간에도 데일리 코드카타를 해보려고 했고, 최근엔 개념보강으로 못했지만 오늘 여유가 있어 마지막 문제를 풀었다!!😃😃

     

    코딩 테스트에 대해 스타트업은 2레벨, 대기업은 3레벨 정도의 난이도를 추상적으로 암시하기 때문에 2레벨 종료를 빨리 하고싶기도 했다.

    대부분의 문제를 스스로 풀었기에 뿌듯했고(또한 모범답안과 풀이과정이 대동소이한 경우도 많았다.),

    그러면서도 유용한 메서드들도 새로 익히게 되고, 특히 reduce나 정규식(카카오가 특히!)을 적극적으로 사용하였다.

     

    이제 다음주부터는 레벨3을 본격적으로 시작하면서 더 심화된 자료구조와 알고리즘에 대해 공부하고 포스팅하겠다! 빠쉐이~~~~

    반응형
Designed by Tistory.