250x250
반응형
Notice
Recent Posts
Recent Comments
Link
개발세발
[Java/자바][백준] 1094번: 막대기 본문
728x90
반응형
SMALL
https://www.acmicpc.net/problem/1094
1094번: 막대기
지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대
www.acmicpc.net
✔️ 막대기 길이을 반으로 나누면서 '반으로 나눈 값을 더한 값'이 X 값이 될때까지 반복하기
🔹 막대기의 길이를 반으로 자른 값이 X값보다 작으면 나오면 보관하고, 크면 한 번 더 나눈다.
🔹 이 과정을 반복하면서 보관하고 있는 막대기의 길이 합이 X값과 똑같아지면 반복을 멈추고, 막대기 개수를 출력한다.
별거 아닌 반복인데 문제에서 말을 너무 헷갈리게 써놔서 잘 인지가 안된다. 그래서 그림을 그려가며 이해했다.
결국, 반으로 계속 나눈 값들을 만들어 가면서 그 값들의 합으로 X값을 만들어 내는 문제이다.
☑️ [풀이]
import java.util.Scanner;
public class Q1094 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int X = sc.nextInt();
//원래 들고 있는 막대기 길이
int makdae = 64;
//기존의 막대기에서 남은 길이 + 보관하고 있는 막대기 길이
int hap = 0;
//보관하고 있는 막대기 길이
int keep = 0;
//총 막대기 갯수
int cnt = 1;
while(true) {
if(makdae == X) {
break;
}
if(makdae!=X) {
//가지고 있는 막대를 절반으로 자른다
makdae = makdae/2;
//위에서 자른 막대의 절반 중 하나를 버리고 남아있는 막대의 길이 + 보관하고 있는 막대기 길이
hap = makdae + keep;
if(hap==X) {
break;
}
else if(hap>X){
//자른 막대의 절반 중 하나를 버리기
makdae = makdae;
}
else {
//hap이 X보다 작으면 해당 막대기 길이값을 누적하여 보관
keep += makdae;
//기존 막대기 수 + 보관하는 막대기 개수 1 추가
cnt++;
}
}
}
System.out.println(cnt);
}
}
728x90
반응형
'문제풀기 > 백준 boj.kr' 카테고리의 다른 글
[Java/자바][백준] 2902번: KMP는 왜 KMP일까? (split 또는 isUpperCase 사용) (0) | 2022.02.13 |
---|---|
[Java/자바][백준] 1333번: 부재중 전화 (2) | 2022.02.07 |