본문 바로가기
Algorithm

[Java&알고리즘] 3진법 뒤집기 (Level 1)

by GoodDayDeveloper 2023. 4. 6.
반응형

 

프로그래머스의 알고리즘 문제 및 풀이에 대해 차근차근 포스팅하려합니다.

 

저도 초보자이기도하고 알고리즘에 쉽게 다가갈 수 없는 부분들이 많기 때문에

최대한 알기 쉽게 정리해보려하고 알고리즘을 어려워하는 분들에게 도움이 되었으면 합니다.

 

많이 공유되고 토론이 될 수 있는 공간이 되었으면 좋겠습니다.

 

 

 

 

 

 

 

환경

언어 : 자바

단계 : 레벨 1단계 (입문자용)

정답률 : 74%

 

 

 

 

 

제목 

 

3진법 뒤집기

 
 
 

 

 

문제 설명 및 코드

 

 

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

 

 
  • n은 1 이상 100,000,000 이하인 자연수입니다.

 

 

1
2
3
4
5
6
7
class Solution {
    public int solution(int n) {
        int answer = 0;
       
        return answer;
    }
}
cs

 

 

 

 

입출력 예

 

n result
45 7
125 229

 

 

 

입출력 예 설명
입출력 예 #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 해야 합니다.

 

 

 

 

 

 

 

 

 

반응형

 

 

 

 

 

 

 

 

문제 정답 코드

 

 

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
    public int solution(int n) {
        String answer = "";
        String sChange = Integer.toString(n,3);
        
        for(int a=sChange.length()-1; a>=0; a--){
            answer += sChange.charAt(a);
        }
        
        return Integer.parseInt(answer,3);
    }
}
cs

 

 

int는 전부 10진수로 인식하기 때문에 

 

문제에서 보여지는 3진법으로 변환 후 다시 10진법으로 변환시켜야하는 과정이 필요합니다.

 

자바 Integer 클래스의 메서드를 이용하여 변환이 가능합니다.

 

10진법에서 3진법으로 변환은 toString을 이용하여 Integer.toString(n,3);로 변경이 가능하며,

 

3진법에서 10진법은 parseInt를 이용하여 Integer.parseInt(answer,3);로 변환이 가능합니다.

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

저는  3진법을 sChange 문자열 변수에 넣은다음

 

반복문을 통해 거꾸로 answer 문자열 변수에 넣어준 다음

 

parseInt를 통해서 반환시켜주었습니다.

 

 

 

 

 

 

 

다른사람 풀이

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
    public int solution(int n) {
        String a = "";
 
        while(n > 0){
            a = (n % 3+ a;
            n /= 3;
        }
        a = new StringBuilder(a).reverse().toString();
 
 
        return Integer.parseInt(a,3);
    }
}
cs

 

 

여기서는 메서드의 변환없이 while안의 연산을 통해서 a 문자열 변수에 값을 넣어준 다음

 

reverse를 이용하여 순서를 뒤집은 후

 

반환값에 parseInt를 통해 10진법으로 변환시키는 코드입니다.

 

 

 

 

 

반응형

댓글