코테/코드트리

[코드트리/NOVICE MID] 십진수와 이진수 2 (JAVA)

imname1am 2023. 9. 28. 15:04
반응형

🔺 문제 

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        String num = br.readLine();
 
        // 1. 이진수 -> 십진수로 바꾸기
        int tmp = 0;
        for(int i = 0 ; i < num.length() ; i++) {
            if(num.charAt(i) == '1')
                tmp += Math.pow(2, num.length() - i - 1);
        }
 
        // 2. 17배 하기
        int seventeen = tmp * 17;
        
        // 3. 다시 이진수로 나타내기
        String str = Integer.toBinaryString(seventeen);
 
        System.out.println(str);
    }
}
cs

 

🧩 해결 아이디어

• 시뮬레이션

 

 


🔺 다른 풀이들

import java.util.Scanner;

public class Main {
    public static final int MAX_DIGIT = 20;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String binary = sc.next();
        
        // 1. 십진수로 변환
        int num = 0;
        for(int i = 0; i < (int) binary.length(); i++)
            num = num * 2 + (binary.charAt(i) - '0');
        
        // 2. 십진수에 17을 곱하기
        num *= 17;
        
        // 3. 이진수로 변환
        int[] digits = new int[MAX_DIGIT];
        int cnt = 0;
        
        while(true) {
            if(num < 2) {
                digits[cnt++] = num;
                break;
            }
            
            digits[cnt++] = num % 2;
            num /= 2;
        }
        
        // 배열의 순서를 뒤집어 이진수를 출력
        for(int i = cnt - 1; i >= 0; i--)
            System.out.print(digits[i]);
    }
}

 


💬 느낀 점

정석으로 풀어야....... 더 도움이 될 듯 하다...ㅎ

 

1회독 2회독 3회독 4회독 5회독
V        
반응형