Algorithm/CodingTest

[Baekjoon] 1094번 막대기 (java)

누구세연 2024. 1. 14. 19:31

https://www.acmicpc.net/problem/1094

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

 

막대기라는 문제 java로 풀이하겠습니다.

이 문제는 길이가 64cm인 막대를 사용하여 길이가 Xcm인 막대를 만들기 위해 필요한 최소 막대 개수를 계산하는 문제입니다.

 

저는 아래와 같이 풀이하였습니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 입력값으로 막대 길이 x를 받음
        int x = scanner.nextInt();
        
        // 막대 길이를 나타내는 배열
        int[] sticks = {64, 32, 16, 8, 4, 2, 1};
        
        // 필요한 막대 개수를 나타내는 변수
        int count = 0;

        // 각 막대 길이에 대해서 반복
        for (int i = 0; i < sticks.length; i++) {
            // 현재 막대 길이가 x 이상이면 사용 가능
            if (x >= sticks[i]) {
                count++;  // 막대 개수 증가
                x -= sticks[i];  // 사용한 막대 길이만큼 x에서 빼기
            }

            // x가 0이 되면 더 이상의 막대가 필요하지 않으므로 반복 종료
            if (x == 0) {
                break;
            }
        }

        // 필요한 막대 개수 출력
        System.out.println(count);

        scanner.close();
    }
}

이 코드는 주어진 길이 x를 만들기 위해 필요한 막대 개수를 계산하는 방법입니다. 

배열 sticks에는 가능한 막대의 길이가 큰 순서로 나열되어 있습니다. 그리고 for 루프를 통해 주어진 길이 x를 만들기 위해 사용할 수 있는 가장 큰 막대부터 차례로 사용하면서 필요한 막대의 개수를 계산합니다.

  1. 입력값으로 길이 x를 받습니다.
  2. sticks 배열에는 가능한 막대의 길이가 큰 순서로 나열되어 있습니다.
  3. for 루프를 통해 sticks 배열을 순회하면서 현재 막대 길이가 x 이상이면 사용 가능합니다.
  4. 사용 가능한 막대일 경우, 필요한 막대의 개수를 증가시키고, 사용한 막대 길이만큼 x에서 빼줍니다.
  5. x가 0이 되면 더 이상의 막대가 필요하지 않으므로 반복을 종료합니다.
  6. 필요한 막대의 개수를 출력합니다.

이러한 방식으로 입력값 x를 만들기 위해 필요한 막대의 최소 개수를 계산합니다.

 

이견이 있으시면 자유롭게 댓글 남겨주세요