728x90
문제
https://www.acmicpc.net/problem/1094
3줄 요약
- 막대의 길이 X를 입력받고, 초기 막대의 길이를 64cm로 설정합니다.
- 현재 막대의 길이가 X보다 작거나 같으면 막대를 사용하고 count를 증가시키고, 비트 연산자 >>=를 사용하여 막대의 길이를 반으로 줄이는 과정을 X가 0이 될 때까지 반복합니다. (비트 연산자 >>=는 오른쪽 시프트 연산으로, 비트를 오른쪽으로 이동시켜 값을 반으로 줄이는 역할을 합니다. 이는 2의 거듭제곱 형태인 막대의 길이를 효율적으로 처리할 수 있습니다.)
- 최종적으로 사용된 막대의 개수 count를 출력합니다. 이 문제에서는 비트마스킹을 활용하여 막대의 길이를 반으로 줄이는 과정을 간단히 구현할 수 있습니다.
코드
package boj1094;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
// 입력 파일에서 데이터 읽기 (테스트용)
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 만들어야 할 막대의 길이 X 입력받기
int X = Integer.parseInt(br.readLine());
br.close();
// 초기 막대의 길이 (64cm)
int bar = 64;
// 막대의 개수를 저장할 변수
int count = 0;
// 막대를 자르면서 X와 같은 길이를 만들 때까지 반복
while (X > 0) {
// 현재 막대의 길이가 X보다 작거나 같으면 막대를 사용하고 count 증가
if (bar <= X) {
X -= bar;
count++;
}
// 막대의 길이를 반으로 줄임 (비트 연산자 사용)
bar >>= 1;
}
// 결과 출력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(Integer.toString(count));
bw.flush();
bw.close();
}
}
'Problem_Solving' 카테고리의 다른 글
백준(BOJ) 2961 : 도영이가 만든 맛있는 음식 (실버2) / 자바(Java) 풀이 (0) | 2024.05.09 |
---|---|
백준(BOJ) 11723 : 집합 (실버5) / 자바(Java) 풀이 (0) | 2024.05.09 |
백준(BOJ) 2579 : 계단 오르기 (실버3) / 자바(Java) 풀이 (0) | 2024.05.06 |
백준(BOJ) 11726 : 2×n 타일링 (실버3) / 자바(Java) 풀이 (0) | 2024.05.06 |
백준(BOJ) 1463 : 1로 만들기 (실버3) / 자바(Java) 풀이 (0) | 2024.05.05 |