본문 바로가기
Coding Test/프로그래머스

[프로그래머스] Lv.1 3진법 뒤집기

by CSEGR 2024. 2. 25.
728x90

<문제 설명>

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

• 따라서 7을 return 해야 합니다.

입출력 예 #2

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229

• 따라서 229를 return 해야 합니다.

 

이 문제를 접하기 전까지 n진법을 구하는 방법도 몰랐던 나레기...

이 문제에서 얻을 지식 : 10진수 ↔️ n진수 변환 방법

 

 

답 도출하는 과정을 설명하자면 

1. 10진법으로 표현된 수를 3진법으로 변환한다. (45 -> 1200)

2. 변환한 3진법 수 앞뒤를 반전시킨다. (1200 -> 0021)

3. 반전된 수를 10진법으로 표현한다. (0021-> 7)

4. 결과값 반환 


🔵10진수 -> n진수

 

0. toString 이용하기 

// 10진수 -> n진수 
String str = Integer.toString(num, n);

 

1. 직접 나눠서 구하기 

while(num! = 0)
{
 	str = num%n + str;
	num /= n;
}

 

2. 

//이진수로 바꾸기 
Integer.toBinaryString(num);

 

🟣 n 진수 -> 10진수 

0. parseInt 함수 이용하기 

//n진수 -> 10진수
int num = Integer.parseInt(str, n);

<알고리즘>

0️⃣.  처음부터 뒤집어진 3진수를 구하기 

class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = "";
        
        //뒤집어진 n진수 구하기 
        while(n!= 0)
        {
            str += n%3;
            n /= 3;
        }
        
        //10진수 -> 3진수 
        answer = Integer.parseInt(str,3);
        return answer;
    }
}

 

 

1️⃣. 3진수를 구한다음 뒤집어서 변환 

class Solution {
    public int solution(int n) {
        int answer = 0;
        String str = "";
        
        //3진수 구하기 
        while(n!= 0)
        {
            str = n%3 + str;
            n /= 3;
        }
        
        //3진수 거꾸로 뒤집기 
        str = new StringBuilder(str).reverse().toString();
        //10진수 -> 3진수
	answer = Integer.parseInt(str, 3);
        
        return answer;
    }
}

 

 

🟠 문자열 뒤집기 

 

 : StringBuilder의 reverse메소드 사용하기 

class Main {
    public static void main(String[] args) {
        String s = "Hello";
        StringBuilder sb = new StringBuilder(s);
        String reverse = sb.reverse().toString();

        System.out.println(reverse);
    }
}

//출력 결과 : olleH

 

728x90