Algorithm๐Ÿฅ‡

1212.8์ง„์ˆ˜2์ง„์ˆ˜

hae02y 2023. 10. 20. 23:34
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

8์ง„์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— 8์ง„์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ˆ˜์˜ ๊ธธ์ด๋Š” 333,334์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

3 1 4
์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง„ ์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค. ์ˆ˜๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ฐ˜๋“œ์‹œ 1๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 256 MB 44329 14980 12445 35.894%

https://www.acmicpc.net/problem/1212

ํ’€์ด

์ฝ”๋“œ

์ฒซ๋ฒˆ์งธ์‹œ๋„

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Stack;  

public class _8์ง„์ˆ˜์™€2์ง„์ˆ˜ {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb = new StringBuilder();  
        Stack<Long> stack = new Stack<>();  
        String str = br.readLine();  
        int length = str.length();  

        long x = Long.parseLong(str, 8);  

        while (x != 0){  
            stack.add(x%2);  
            x /= 2;  
        }  

        while (!stack.isEmpty()){  
            sb.append(stack.pop());  
        }  

        System.out.println(sb);  
    }  
}

๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. numberFormat...! ์™œ๋ƒํ•˜๋ฉด ์ž…๋ ฅ์˜ ๊ธธ์ด๋Š” 333,334 ๊นŒ์ง€ ์ด๋ฏ€๋กœ, ํ•œ์ฐธ๋ชป๋ฏธ์น˜๋Š” ๋ฒ”์œ„์—์„œ long๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๋Š”๋ฐ, ๋‚ด๊ฐ€ ํ‘ผ ๋ฐฉ์‹์—์„œ ํ™•์ธํ•ด๋ณด๋ฉด long x = Long.parseLong(str, 8); ์—ฌ๊ธฐ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์—ญ์‹œ ์ˆซ์ž๋ณ€ํ™˜์—†์ด String๋งŒ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”๊ฒƒ์ด๋‹ค.

๋‘๋ฒˆ์งธ ์‹œ๋„

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Stack;  

public class _8์ง„์ˆ˜์™€2์ง„์ˆ˜ {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb = new StringBuilder();  

        String str = br.readLine();  

        for(int i=0; i<str.length(); i++){  
            //str์„ ์ž˜๋ผ์ค€๋‹ค.  
            int num = str.charAt(i) - '0';  
            String numStr = binaryNumber(num);  

            if(numStr.length() == 3){ //binary๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์ด 3์ž๋ฆฌ์ธ๊ฒฝ์šฐ  
                sb.append(numStr);  
            } else if (numStr.length() == 2) { //binary๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์ด 2์ž๋ฆฌ์ธ๊ฒฝ์šฐ, ์•ž์— 0์ถ”๊ฐ€  
                sb.append("0").append(numStr);  
            }else if(numStr.length() == 1){ //binary๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’์ด 1์ž๋ฆฌ์ธ๊ฒฝ์šฐ, ์•ž์— 00์ถ”๊ฐ€  
                sb.append("00").append(numStr);  
            }  
        }  

        if(str.equals("0")){ //str์ด 0์ธ๊ฒฝ์šฐ StringIndexOutOfBounds ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์—ฌ 0์ž…๋ ฅ์‹œ 0์ถœ๋ ฅ  
            System.out.println(0);  
            return;  
        }  

        while (sb.charAt(0) == '0'){ //sb์˜ ์ฒซ๋ฒˆ์งธ๊ฐ’์ด 0์ธ๊ฒฝ์šฐ 1์ด ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ์ œ๊ฑฐ  
            sb.deleteCharAt(0);  
        }  

        System.out.println(sb);  
    }  

    public static String binaryNumber(int n){ //2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ  

        if(n == 0) return "000"; //0์ด ์ž…๋ ฅ๋˜๋Š”๊ฒฝ์šฐ์— 000์„ ๋ฐ˜ํ™˜  

        Stack<Integer> stack = new Stack<>();  
        String str = "";  
        while (n > 0){  
            stack.add(n%2);  
            n /= 2;  
        }  

        while (!stack.isEmpty()){  
            str += stack.pop();  
        }  

        return str;  
    }  
}
๋ฐ˜์‘ํ˜•