설계 : 27분
풀이 : 12분
디버깅 : 6분
총 : 45분
1094번: 막대기
지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대
www.acmicpc.net
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int X = sc.nextInt();
int stick = 64; // 현재 자르고 있는 막대기의 길이
int count = 1; // 이어붙인 막대기 개수
int sum = 0; // 이어붙인 막대기 길이
// sum이 X와 일치하고, X가 stick의 길이와 같다면 실행하면 안됨
while(sum != X && X != stick) {
stick /= 2; // 막대기 자르기
sum += stick; // 자른 막대기 이어붙여보기
// 이어 붙인 막대기가 X보다 길다면 다시 떼어내기
if(sum > X) {
sum -= stick;
// 이어 붙인 막대기가 X보다 짧다면 그대로 붙이고, 붙인 막대기 개수 증가 시키기
} else if(sum < X) {
count++;
}
}
System.out.println(count);
}
}
느낀점 및 정리 ✍️
1. 설계에서 생각보다 시간이 많이 걸렸다. 분명 쉽고 간단한 문제인게 보이는데 "절반 중 하나를 버린다" "가장 짧은 막대" 등 불필요한 조건에 집착해서 좀 헤매다보니 지체됐고, 다시 처음부터 생각해보자는 마음으로 새로 설계했더니 금방 해결책이 나왔다.
2. while문의 무한루프에 빠지는 것을 잘 .... 컨트롤 하자..
3. 불필요한 조건에 집착하지 말자 ㅠ ㅠ ~~~~~~
'Algorithm & SQL > BOJ' 카테고리의 다른 글
[백준 5637번 / Java] BOJ 5637 : 가장 긴 단어 (0) | 2024.02.28 |
---|---|
[백준 17413번 / Java] BOJ 17413 : 단어 뒤집기 2 (0) | 2024.02.28 |
[백준 1924번 / Java] BOJ 1924 : 2007년 (0) | 2024.02.25 |
[백준 1748번 / Java] BOJ 1748 : 수 이어 쓰기 1 (0) | 2024.02.25 |
[백준 2979번 / Java] BOJ 2979 : 트럭 주차 (2) | 2024.02.24 |