문제
https://www.acmicpc.net/problem/1094
문제 개요
이 문제는 주어진 막대의 길이를 절반으로 나누고 원하는 길이만큼 만들기 위해 최소한 몇 개의 막대를 사용하는지를 묻고 있습니다. 막대의 길이를 이진법으로 표현한 후, 이진수의 '1'의 개수를 세면, 원하는 길이를 만들기 위해 필요한 막대의 수를 알 수 있습니다.
접근 방법
- 처음에 64cm 길이의 막대가 있고, 목표는 Xcm 길이의 막대를 만드는 것입니다.
- 64는 이진법으로 표현하면 1000000이고, 막대를 절반으로 자를 때마다 이진법에서 '1'의 개수는 하나씩 줄어듭니다.
- 이진법에서 '1'이 나오는 위치는 Xcm를 만들기 위해 필요한 막대 길이를 나타냅니다.
- 따라서 X를 이진수로 표현했을 때, '1'의 개수만큼의 막대가 필요합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int ans = 0; // 필요한 막대 수
int n = Integer.parseInt(br.readLine()); // 입력된 값 X
String s = Integer.toBinaryString(n); // X를 이진수로 변환
// 이진수에서 '1'의 개수를 세면 필요한 막대 수와 동일
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1') ans++;
}
System.out.println(ans);
}
}
'문제 > 백준' 카테고리의 다른 글
[백준] 7682 틱택토 - Java (0) | 2024.10.25 |
---|---|
[백준] 3190 뱀 - Java (1) | 2024.10.24 |
[백준] 1018 체스판 다시 칠하기 - Java (0) | 2024.10.23 |
[백준] 9082 지뢰찾기 - Java (5) | 2024.10.17 |
[백준] 12919 A와 B 2 - Java (1) | 2024.09.22 |