not bad 한 개발

프로그래머스 - 3진법 뒤집기 본문

프로그래머스

프로그래머스 - 3진법 뒤집기

leebean 2022. 5. 10. 21:10

문제 : https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

 

github : https://github.com/delight-HK3/programmers_study/tree/main/programmers

 

GitHub - delight-HK3/programmers_study: It is a repository for storing programmers problems.

It is a repository for storing programmers problems. - GitHub - delight-HK3/programmers_study: It is a repository for storing programmers problems.

github.com

(programmers_68935_1.java, programmers_68935_2.java 파일 입니다.)

 

문제분석

매개변수로 임의의 정수 값을 입력받았을 때  3진수로 변형 후 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 값을 리턴해야 하는 문제입니다. 

저는 두 가지 방법으로 해결했습니다.

  1. 3진수 형태 문자열로 변형한 후 reverse함수를 사용하여 문자열을 뒤집은 후 3진수 문자열을 10진수 정수형으로 리턴
  2. while문을 사용해 입력받은 값이 0 이상이면 입력값과 3을 나눈 나머지를 빈 문자열에 저장한 후 입력값을 3을 나누어 나온 몫을 다시 저장하는 방식으로 반복하여 문자열을 만든 후 정수형으로 바꾸어 리턴

 

문제풀이

class Solution { // 1번 방법
    public int solution(int n) {
        int answer = 0; // 기본으로 제공되는 변수
        String str = Integer.toString(n,3);
        // 3진수 로 변형
        System.out.printf("3진수 = %s%n",str);
        // 3진수로 변형된 값을 출력

        StringBuffer test = new StringBuffer(str);
        // 변경 가능한 문자열로 만들기
        String reverse = test.reverse().toString();
        // test를 뒤집은 후 String 형으로 형변환 후 문자열 reverse에 저장

        answer = Integer.parseInt(reverse,3);
        // 문자열 reverse를 10진수 정수형으로 변환 후 answer에 저장

        System.out.printf("10진수 = %d%n",answer);
        // 10진수로 변형된 값을 출력

        return answer; // answer 리턴
    }
}
public class programmers_68935_1 {
    public static void main(String[] args) {
        Solution sol = new Solution(); 
        // sol이름의 참조 변수 선언과 동시에 인스턴스를 저장
        sol.solution(125); 
        // Solution 클래스의 멤버 메서드 solution에 매개변수 125입력
    }
}

 

class Solution { // 2번 방법
    public int solution(int n) {
        int answer = 0; // 기본으로 제공되는 변수
        String str = ""; // 빈 문자열 선언

        while(n > 0){ // n의 값이 0이상이면 반복
            str = str + (n % 3); // 문자열에 n에서 3을 나눈 나머지 값을 저장
            n = n / 3; // n을 3으로 나눈 후 다시 저장
        }

        answer = Integer.parseInt(str, 3);
        // 3진수 문자열을 10진수 정수형으로 변환하여 answer에 저장

        return answer; // answer 리턴
    }
}
public class programmers_68935_2 {
    public static void main(String[] args) {
        Solution sol = new Solution();
        // sol이름의 참조 변수 선언과 동시에 인스턴스를 저장
        sol.solution(125);
        // Solution 클래스의 멤버 메서드 solution에 매개변수 125입력
    }
}
Comments