코테/백준

[백준/JAVA] 3460번: 이진수

imname1am 2023. 5. 19. 12:57
반응형

🔺 문제

 

3460번: 이진수

양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.

www.acmicpc.net

 

 

🔺 코드

(틀림)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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));
        
        int T = Integer.parseInt(br.readLine());
        
        for(int i = 0 ; i < T ; i++) {
            int n = Integer.parseInt(br.readLine());
            String[] str = Integer.toBinaryString(n).split(""); // 이진수로 변환
            
            StringBuilder sb = new StringBuilder();
            for(int j = 0 ; j < str.length ; j++) {
                if(str[j].equals("1")) {
                    sb.append(str.length - 1 - j).append(" ");
                }
            }
            System.out.println(sb.reverse().toString().trim());
        }
    }
}
cs

일단 앞에서부터 순서대로 인덱스 구한 다음에 reverse 써서 거꾸로 출력하면 되겠지-해서 했는데 틀렸다고 함...

 

 

 

 

(정답)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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));
        
        int T = Integer.parseInt(br.readLine());
        
        for(int i = 0 ; i < T ; i++) {
            int n = Integer.parseInt(br.readLine());
            String str = Integer.toBinaryString(n);
            
            StringBuilder sb = new StringBuilder();
            for(int j = str.length() - 1 ; j >= 0  ; j--) {
                if(str.charAt(j) == '1') {
                    sb.append(str.length() - 1 - j).append(" ");
                }
            }
            System.out.println(sb.toString());
        }
    }
}
cs

 

 

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));
        
        int T = Integer.parseInt(br.readLine());
        
        for(int i = 0 ; i < T ; i++) {
            int n = Integer.parseInt(br.readLine());
            String str = Integer.toBinaryString(n); // 이진수로 변환
            
            StringBuilder sb = new StringBuilder(str);
            String realStr = sb.reverse().toString();
            
            for(int j = 0 ; j < realStr.length() ; j++) {
                if(realStr.charAt(j) == '1') {
                    System.out.print(j + " ");
                }
            }
            System.out.println();
        }
    }
}
cs

어떻게든 reverse 써먹어 보고 싶어서 어거지로 써봤는데...

위 풀이가 더 나은 거 같음..

 


🔺 다른 풀이들

 - 이진수로 변환할 때, while문 활용하심

 

자바 - 구현 - 백준 3460 이진수

문제 문제해결 import java.util.Scanner; public class B3_3460 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //2진수 담을 String 배열 String[] binary = new String[n]; //2진수 구하기 for

broship.tistory.com

 


💬 느낀 점

만만하게 봤다가 생각보다 못 푸는 내 모습을 보고 충격,,,,ㅋㅋㅋㅋㅋㅋ

 

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ 풀이

 

[백준 3460번] 이진수

https://www.acmicpc.net/problem/3460 3460번: 이진수 양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이

lealea.tistory.com

 

✔ StringBuilder reverse() 메소드

 

 

[StringBuilder] StringBuilder.reverse() 이용해서 문자열 뒤집기

Javascript문법 공부중 this.message = this.message.split('').reverse().join('') 라는 얄미운 문법을 발견. 'Java엔 저런게 없을까' 라는 생각과 바로 시작 된 구글링. Java 또한 StringBuilder의 reverse() 메소드를 이용하

ahndding.tistory.com

 

반응형