[카카오] 3차 코딩 테스트 문제1(N진수 게임) 풀이 using Javascript

나는 아직 코딩 테스트를 한 번도 격어보지 못했다.
그래서 최근 공개된 카카오의 신입 공채 문제를 풀어보기로 했다.

그 첫번쨰 문제는 다음과 같다.


문제1. N진수 게임

튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다.

  1. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
  2. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.

입력 형식

진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.
  • 2 ≦ n ≦ 16
  • 0 < t ≦ 1000
  • 2 ≦ m ≦ 100
  • 1 ≦ p ≦ m

출력 형식

튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 10~15는 각각 대문자 A~F로 출력한다.


보다 자세한 문제 설명은 아래 카카오 공식 블로그 링크에서 확인할 수 있다.
http://tech.kakao.com/2017/11/14/kakao-blind-recruitment-round-3/



문제 풀이

내가 생각했을 때 이 문제의 키워드는 진법 변환, 반복문 정도다. 

먼저 이 문제에서 반복문이 시행되어야 하는 횟수는
미리 구할 숫자의 갯수(t) * 게임에 참가하는 인원(m)으로 나타낸다.



다음으로 진법 변환을 먼저 살펴보자.
Javascript에서는 아래와 같은 방법으로 원하는 진법으로 숫자를 변경 할 수 있다.

(3).toString(2); //11

위와 같은 방법으로 진법을 변경한 숫자의 글자수만큼 다시 loop를 진행 해 튜브의 순서가 되면 output에 해당 문자열을 추가해준다.

최종 코드는 아래와 같다.

* 보다 개선시킬 수 있는 부분 있다면 댓글을 남겨주시면 반영하겠습니다.


const n = 2; //진법
const t = 4; //미리 구할 숫자의 갯수
const m = 2; //게임에 참가하는 인원
const p = 1; //튜브의 순서

//i 진행 횟수
//j n진법 정수
//k n진법 정수 문자열 위치
//loopCount 반복 횟수
const loopCount = t * m;
let output = '';

for (let i = 1, j = 0; i <= loopCount; ) {
  const num = j.toString(n);
  const numLength = num.length;
  for (let k = 0; k < numLength && i <= loopCount; k++, i++) {
    const testNum = i % m;
    if ((p === m && testNum === 0) || (p !== m && p === testNum)) {
      output += num[k].toUpperCase();
    }
  }
  j++;
}

console.log(output); //0111


댓글

이 블로그의 인기 게시물

[IIS] OraOLEDB.Oracle.1 설치 방법

[IIS] IIS 7.5 HTTP 오류 401.3 - Unauthorized 해결방법

[ASP] Server.CreateObject를 호출하지 못했습니다. 이 개체에 액세스할 수 없습니다.