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

진예·2023년 12월 20일
0

Programmers

목록 보기
17/45
post-thumbnail

📌 문제

Lv1. 3진법 뒤집기

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

✔️ 제한사항

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

✏️ 입출력

  1. 입출력 예 #1

  2. 입출력 예 #2

💡 코드

n3진법으로 표현하는 방법은 위 그림과 같다. 이를 코드로 표현하다 보면 읽는 순서와 반대 순서로 저장하게 되는데, 문제에서 3진법으로 표현된 수를 뒤집어 다시 10진법으로 변환하라고 하였으므로, 스택에 결과를 저장하여 꺼내주면 뒤집힌 순서대로 10진법으로 변환할 수 있다!

마지막 for문을 돌릴 때, 조건 변수로 s.size()를 사용하면 스택에서 요소를 하나씩 꺼낼 때마다 크기가 줄어서 모든 요소에 대하여 접근할 수 없다.

import java.util.*;
class Solution {
    public int solution(int n) {
        
        Stack<Integer> s = new Stack<>();
        
        int cnt = 0;
        while(n > 0) {
            cnt++;
            s.push(n%3);
            n /= 3;
        }
        
        int answer = 0;
        for(int i=0;i<cnt;i++) {
            System.out.print(i + " ");
            answer += s.pop() * Math.pow(3, i);
        }
 
        return answer;
    } 
}

다른 사람의 코드 : Integer.parseInt(문자열, n)n진법의 수10진수로 변환해준다고 한다,, 문자열 s에 나머지를 하나씩 추가하여 Integer.parseInt()s3만 넘겨주면 아주 간단하게 해결되는 문제였다,, 근데 문자열 연산을 수행해야 해서 시간이 좀 더 걸리는듯?

import java.util.*;
class Solution {
    public int solution(int n) {
       
        String s = ""; 
        while(n > 0) {
            s += n % 3;
            n /= 3;
        }
        
        return Integer.parseInt(s, 3);
    } 
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글