728x90
https://www.acmicpc.net/problem/3460
이진수
한국어
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 128 MB | 13758 | 7476 | 6500 | 55.522% |
문제
양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106)
출력
각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.
예제 입력 1 복사
1
13
예제 출력 1 복사
0 2 3
풀이 : 이진수를 찾는 과정에서 나머지가 1인 위치를 찾는 문제.
양의 정수 n을 2로 나누어 1이 나올 때까지 나누기를 반복하며, 나누기를 할 때마다 index가 증가하며
나머지가 1인 경우만 index를 뽑는 풀이법으로 풀었다.
주어진 수를 가지고 while문을 돌려야 하기에 처음엔 이렇게 풀었는데...
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
// 백준 3460. 이진수
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());
int x = n;
int index= 0;
while (x/2!=1){
if(n%2==1) {
System.out.print(index + " ");
}
n = n/2;
index ++;
}
}
}
}
시간 초과 오류가 떴다.
이유는..
x/2!=1은 x가 2로 나누어 떨어지지 않는 경우에만 반복문을 실행하므로, x가 2의 제곱수일 경우만 제대로 동작한다.
문제는 x가 2의 제곱수가 아니라면 while문이 끝나기 전에 마지막 1의 위치가 출력되지 않게 된다는 것이다.
따라서 x>0으로 변경하면, 1이 되기까지 반복을 계속 할 것이기에
다음과 같이 수정하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
// 백준 3460. 이진수
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());
int index = 0;
while (n > 0) {
if (n % 2 == 1) {
System.out.print(index + " ");
}
n = n / 2;
index++;
}
System.out.println(); // add a new line after printing the indices for each test case
}
}
}
728x90
'알고리즘 문제풀이 > Beakjoon' 카테고리의 다른 글
백준 4619. 루트 (JAVA) (0) | 2023.03.19 |
---|---|
백준 5691. 평균 중앙값 문제 (JAVA) (0) | 2023.03.16 |
백준 4909. Judging Olympia (JAVA) (0) | 2023.02.28 |
백준 3507. Automated Telephone Exchange (JAVA) (0) | 2023.02.23 |
백준 2783. 삼각 김밥 (JAVA) (1) | 2023.02.22 |