TIL#30

박감자·2024년 10월 29일

TIL

목록 보기
30/34
post-thumbnail

알고리즘: 3진법 뒤집기

문제 링크

개요 짜기

  1. 들어온 매개변수를 3진법으로 전환
  2. 뒤집기
  3. 10진법으로 재전환 -> 반환

3진법으로 전환

사실 여기서부터 막막해서... 그냥 구글링으로 문제를 풀었지만, 생각보다 신기한 내장함수가 많은 것 같아서 따로 풀이를 적어보는 중이다.

3진법으로 바꾸는 방법을 알아보던 중 Number.prototype.toString()이 있다는 것을 발견. Object.prototype.toString()와는 다른 메서드이다.

Number.prototype.toString() : 매개변수로 진수를 나타내는 기수의 값을 받는다고 한다. 없을시 디폴트로 10진법으로 표현

???: 아니 그럼 매개변수로 3만 넣어도 자동으로 바뀐단 말이야?

const n = 45;
const ternaryBase = n.toString(3);
console.log(ternaryBase);	//1200


이게 되네???

사실 계산해야되나 고민중이었는데, 그럴 필요가 없어졌다.

뒤집기

Number.prototype.toString()의 반환값은 문자열이기 때문에 배열로 만들어준 후 reverse를 해주면 뒤집기 마저도 쉽다.

const reversedNum = [...ternaryBase].reverse();
console.log(reversedNum);	// ['0', '0', '2', '1']
// 문자열로 재변환
const reversedStr = reversedNum.join('');
console.log(reversedStr);	// '0021'

10진법으로 재전환

parseInt()도 비슷한 기능으로 3진법에서 10진법으로 전환이 가능하다. 매개변수로 현재 수의 진법을 적어주면 자동으로 10진법으로 바꿀 수가 있다.

console.log(parseInt(reversedStr, 3));	//7

문제 풀이 코드

function solution(n) {
	return parseInt([...n.toString(3)].reverse().join(''), 3);
}

한줄로 깔끔~

마치며...(개인과제 어디감??)

profile
코딩하는 감자

4개의 댓글

comment-user-thumbnail
2024년 10월 29일

저도개인과제않했어요 우리 내일하자

1개의 답글
comment-user-thumbnail
2024년 10월 29일

명수로 시작해서 명수로 끝난다.. 이거 쥑이는데요?

1개의 답글