Red Glitter Pointer

 

설계 : 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. 불필요한 조건에 집착하지 말자 ㅠ ㅠ ~~~~~~ 

 

 

+ Recent posts

loading