[Programmers]3진법 뒤집기

이묘·2022년 7월 19일
0

CodingTest

목록 보기
6/41
post-thumbnail

프로그래머스 코딩테스트 연습 1단계

  • 진법변환하기(toString(), parseInt())
  • 문자열 뒤집기(split(), reverse(), join())




소스코드

  function solution(n) {
    var answer = 0;

    // 3진법 변환
    var third = n.toString(3);
    // 현재 문자열인 상태로 뒤집기
    driht = third.split('').reverse().join('');
    // 다시 10진수로 변환
    answer = parseInt(driht, 3);


    return answer;
}

result = solution(45);
console.log(result);




코드리뷰

짧게 적으면 한 줄로도 적을 수 있어서 조금 놀랐다.

parseInt(n.toString(3).split('').reverse().join(''), 3)

일단 n으로 들어온 숫자를 3진법으로 변환시켜준다.

.toString()

에서 괄호 안에 숫자를 넣으면 해당 진법으로 변환할 수 있다. 예를들어 str.toString(2)라고 하면 str을 2진법으로 변환시켜준다. 이 때, 숫자는 문자열로 변환된다.

.split('').reverse().join('')

이 코드로 문자열을 뒤집어준다. reverse()는 원래 배열을 뒤집을 때 사용하는 함수라서 자바스크립트에선 뒤집으려고하면 아래처럼 에러가 나온다.

Uncaught TypeError TypeError: third.reverse is not a function

그래서 split으로 문자열을 한 글자씩 분해해줘야 한다. 괄호안에는 분할의 기준을 써주면 되는데 ,로 구분하고싶다면 (',')를 띄어쓰기를 기준으로 분할해주고 싶다면 (' ')을 넣어주면 된다. 이 문제에서는 한 글자씩 분할해주면 되므로 아무것도 넣지 않았다.

문자열을 하나씩 분할해놨다면 이제 reverse()를 써서 순서를 뒤집어준다.

그리고 join()을 써서 분할해놓은 문자열을 다시 하나의 문자열로 만든다. join함수는 배열에 있는 원소의 값들을 연결하여 하나의 문자열로 만드는 것이므로.



코드의 결과는 대략 이런식으로 진행된다. 나는 내가 알아보기 편하게 third(3진수가 담겨있는 변수)를 뒤집어서 dirht라고 이름지었다ㅎㅎ 첫번째 예제(45)를 예를 들어 진행을 설명하면 3진수로 변환되면 2100이 되는데,

.split('') => '2', '1', '0', '0'
.reverse() => '0', '0', '1', '2'
.join('') => 0012
(이 때, 0012는 문자열이다.)

순서로 값이 변한다고 보면 된다.


parseInt( dirht ,3)

parseInt함수는 n진수를 숫자타입(10진수)으로 다시 변환시켜주는 함수이다.
dirht에는 3진수를 그리고 콤마 뒤쪽에는 변환을 원하는 n진수가 몇 진수인지 숫자를 매개변수로 넣어주면 된다.

profile
본질을 공부해야 응용도 하지 않을까

0개의 댓글