자료구조와 알고리즘/문제풀기

백준 1373,1212,2089 - 진법변환문제

now0204 2023. 4. 10. 23:19

 

1373

2진법 - 8진법 

2진법을 3자리씩 끊어서 읽으면 8진법 

public class Main{

    public static void main(String[] args) throws Exception {
       BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
       Stack<Integer> s = new Stack();
       String input = br.readLine();
       
        //숫자가 너무 커서 자료형에 저장 불가 -->문자로 표현해야함
        int size = input.length()%3 == 0 ? input.length()/3 : input.length()/3+1;
        char[] oresult= new char[size];//char arr크기 2진수 3당 8진수 1개 표현
       
        int result = 0; //계산결과 담기
        StringBuilder sb = new StringBuilder();//출력용
        
        //바이너리 값 스택에 저장
        for(char a : input.toCharArray()){
          s.push(Integer.parseInt(a+""));
        }

        //8진수로 고치기
        for(int i=0; i<input.length();i++){
            if(i % 3 ==0 )result =0;
            int temp = ((int)Math.pow(2,i%3))*s.pop();
            result += temp;
            oresult[i/3] = (char)(result+'0');
        }

        sb.append(oresult);
        sb.reverse();//결과 뒤집기


       bw.write(sb.toString());
       bw.flush();
       bw.close();
    }


}

1212

8진법 -> 2진법

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        String input = br.readLine();
        int[] oinput = new int[input.length()];

        //입력변환
        for(int i=0; i<input.length();i++){
            oinput[i] = Integer.valueOf(input.charAt(i))-'0';
        }
        //변환
        int n=0;
        for(int i=0; i<oinput.length;i++){
            n = oinput[i];
            sb.append(getBinery(n));
        }
        if(!sb.toString().equals("000")) {
            while (sb.charAt(0) == '0') {
                sb.deleteCharAt(0);
            }
        }
        else {
            System.out.println("0");
            return;
        }
        System.out.println(sb);

    }

    private static String getBinery(int n) {
        StringBuilder sb = new StringBuilder();
        Stack<Character> s = new Stack();
        if(2>n)sb.append("00");
        else if (4>n) sb.append("0");
        while(n != 0 && n!= 1){
            s.push((char)(n%2+'0'));
            n /=2;
        }
        if(n ==1) s.push('1');
        else s.push('0');
        while(!s.empty())
        sb.insert(sb.length(),s.pop());
        return sb.toString();
    }

}

2089

-2진법 

public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int input = sc.nextInt();
        StringBuilder sb = new StringBuilder();
        if(input == 0) {System.out.println("0");}
        else{
            while(input != 0){
                sb.append(Math.abs(input%-2));
                input = (int)Math.ceil((double)input/-2);
            }
           
            sb.reverse();
            System.out.println(sb);
    }
    
}
}