[백준/JAVA] 3460번: 이진수
🔺 문제
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