[알고리즘] 3진법 뒤집기, 숫자의 표현,

3진법 뒤집기 - 개요

자연수 n을 3진법으로 만들어 뒤집고 뒤집은 수를 다시 10진법으로 맞추기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr

풀이

function solution(n) {
  let answer = 0;
  let str = n.toString(3).split("").reverse().join("");

  answer = parseInt(parseInt(str, 3).toString(10));

  return answer;
}

정수를 toString, parseInt로 진법 변환할 수 있다는 것을 처음 알았다.

parseInt(string: string, radix?: number | undefined): number

toString(radix?: number | undefined): string

숫자의 표현 - 개요

연속된 자연수들을 모두 더해서 n이 나오는 경우를 전부 찾아서 return

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr

투포인터, 슬라이딩 윈도우방식으로 풀었다.

연속된 수들의 합 sum이 n보다 작다면 rt를 +1로 키우고 rt만큼 계속 더해준다.

sum이 n보다 커지면 lt를 -1로 줄이고 lt만큼 계속 줄여준다.

마지막에 n 자기 자신까지 +1 시켜주면 된다

function solution(n) {
  let answer = 0;
  let sum = 1;
  let lt = 0;
  let rt = 1;
  while (lt !== n && rt !== n) {
    if (sum === n) {
      answer += 1;
      lt += 1;
      sum -= lt;
    } else {
      if (sum > n) {
        lt += 1;
        sum -= lt;
      } else {
        rt += 1;
        sum += rt;
      }
    }
  }
  return answer + 1;
}