12월, 2017의 게시물 표시

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

나는 아직 코딩 테스트를 한 번도 격어보지 못했다. 그래서 최근 공개된 카카오의 신입 공채 문제를 풀어보기로 했다. 그 첫번쨰 문제는 다음과 같다. 문제1. N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다. 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에 해당 문자열을 추가해준다. 최종...

[Javascript, ECMAScript] float(실수) 연산 오류 원인과 해결 방법

Javascript에서 float(실수) 연산을 수행하다 보면 원치않는 결과가 발생하는 경우가 있다. 예를 들어 아래와 같은 연산을 수행하는 경우 0.3이라는 결과를 기대하지만, 실제로는 0.30000000000000004라는 값이 표시된다. console.log(0.1 + 0.2); //0.30000000000000004 이러한 오류가 발생하는 이유는 Javascript(ECMAScript)가 IEEE-754 를 표준으로 사용하고 있기 때문이다. IEEE-754는 컴퓨터에서 부동소수점을 표시하는 방법을 정하는 표준이다. 사실 위와같은 결과가 나오는 것은 표준을 따르고 있는 것이기 때문에 정상 작동하고 있는 것이지만... 우리가 원하는 결과는 0.3이므로 수정이 필요하다. 아래와 같이 parseFloat() 와 toFixed() 메서드를 이용해 해결 할 수 있다. console.log(0.1 + 0.2); //0.30000000000000004 const num1 = parseFloat(0.1); const num2 = parseFloat(0.2); console.log((num1 + num2).toFixed(2)); //0.3 toFixed() 메서드의 인자값은 소수 몇째 자리까지 표시할 것인지를 지정한다.