오늘 ONEUL
오늘의 개발
오늘 ONEUL
전체 방문자
오늘
어제
  • 오늘의 개발 (248)
    • 📝 TIL (121)
    • 💡 Projects (6)
      • 드로잉 게임 [눈치 코치 캐치!] (4)
      • 익명고민상담소 [대나무숲] (2)
    • 🌎 Web (47)
      • Spring (3)
      • Java (14)
      • JavaScript (16)
      • CSS (10)
      • HTML (4)
    • 📚 Database (7)
    • 👾 Trouble Shooting (3)
    • 📊 Algorithm&SQL (39)
    • 😺 Git (1)
    • 📖 Books (7)
      • 자바 객체 지향의 원리와 이해 (7)
    • 📁 ETC (2)
    • 되돌아보기 (15)

블로그 메뉴

  • 😺 Github
  • 🍀 NAVER Blog

인기 글

최근 댓글

최근 글

태그

  • 자바
  • MySQL
  • Java
  • 프로그래머스
  • Til
  • JavaScript
  • 항해99
  • 알고리즘
  • 자바스크립트
  • Algorithm

티스토리

hELLO · Designed By 정상우.
오늘 ONEUL

오늘의 개발

[Java/프로그래머스] 3진법 뒤집기
📊 Algorithm&SQL

[Java/프로그래머스] 3진법 뒤집기

2022. 11. 19. 12:52

문제

 

 

 

풀이

(1) 문제 분석하기

 

10진법 → 3진법

  • 먼저 3진법을 어떻게 도출해내는지 알아보자.

이건 2진법

  • 10진법으로 표현되어 있는 수를 3으로 계속 나눈 나머지를 뒤에서부터 올린다.
  • 45를 3진법으로 나타내면 1200이다.

 

3진법 → 10진법

  • 다시 3진법을 10진법으로 변환해보자.
45 = ( 1 X 3³ ) + ( 2 X 3² ) + ( 0 X 3¹ ) + ( 0 X 3 )

 

다시 문제로 돌아와서,

  • 데이터 삽입이 자유롭고, 인덱스로 접근이 쉬운 Arraylist를 이용하였다.
  • 반복문을 통해 3으로 계속 나눈 나머지를 list로 add() 한다.
  • 포인트는 굳이 3진법 앞뒤반전을 하지 않아도 곱해주는 3의 n승으로 조정할 수 있다는 것이다.
  • 10진법으로 변환할 때는 제곱 함수 Math.pow(밑, 지수)를 이용한다.

 

(2) 슈도코드 작성하기

3진법 수를 담을 Arraylist 선언

while(n이 0보다 클 때) {
	list에 n % 3 값을 add()
    n을 3으로 나누고 그 값을 다시 n에 담음
}
// list = {0, 0, 2, 1}

for(list의 size까지) {
	list의 요소에 하나씩 접근하여 3의 3승 ~ 3의 0승까지 곱한 후 더하기
}
// ( 0 x 3³ ) + ( 0 x 3² ) + ( 2 x 3¹ ) + ( 1 x 3 )

 

(3) 코드 구현하기

package algorithm.test13;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
    // 10진법 -> 3진법으로 변환 후 list 삽입
    // 다시 10진법으로

    public static void main(String[] args) {
        int n = 45;
        System.out.println(solution(n));
    }
    public static int solution(int n) {
        int answer = 0;

        List<Integer> temp = new ArrayList<>();
        // 3진법으로 변환하여 list에 담기
        while (n > 0) {
            temp.add(n % 3);
            n /= 3;
        }

        for (int i = 0; i < temp.size(); i++) {
            answer += (Math.pow(3, temp.size()-i-1)*temp.get(i));
        }

        return answer;
    }
}

 

 

+) 다른 풀이 방법

  • N진수를 10진수로 변환할 때 → Integer.parseInt(N진수, N)
  • N진수의 타입은 String이기 때문에 list가 아닌 String으로 3진법 수를 받는다.
package algorithm.test13;

public class Solution {
    // 10진법 -> 3진법으로 변환 후 String에 담기
    // Integer.parseInt() 이용해서 다시 10진법으로

    public static void main(String[] args) {
        int n = 45;
        System.out.println(solution(n));
    }
    public static int solution(int n) {
        String str = "";
        while(n > 0) {
            str += n % 3;
            n /= 3;
        }
        return Integer.parseInt(str, 3);
    }
}

 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

저작자표시 비영리 변경금지 (새창열림)

'📊 Algorithm&SQL' 카테고리의 다른 글

[Java/프로그래머스] 같은 숫자는 싫어  (0) 2022.11.19
[Java/프로그래머스] 최소직사각형  (0) 2022.11.19
[Java/프로그래머스] 하샤드 수  (0) 2022.11.19
[Java/프로그래머스] 콜라츠 추측  (0) 2022.11.19
[Java/프로그래머스] 자릿수 더하기  (0) 2022.11.19
    오늘 ONEUL
    오늘 ONEUL
    Backend Engineer ㅣ 어제보다 나은 오늘, 재밌는 건 오늘부터!

    티스토리툴바