본문 바로가기
알고리즘/수학 퍼즐

[수학 퍼즐 / java] 04. 막대 자르기

by drCode 2021. 3. 23.
728x90
반응형

안녕하세요.

이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 4번문제인 막대 자르기 를 풀어보겠습니다

 

길이 n[cm]의 한 막대를 1[cm] 단위로 자른다고 생각해 본다. 단, 하나의 막대는 한 번에 한 사람만이 자를 수 있다. 잘린 막대가 3개가 되면, 동시에 3명이 자를 수 있다.

최대 m명이 있을 때 막대를 자르는 최소 횟수를 구해 보시오.

예를 들어 n = 8, m = 3일 총 4번 자를 수 있다.

문제 1

n = 20, m = 3일 때의 횟수를 구해 보아라.

문제 2

n = 100, m = 5일 때의 횟수를 구해 보아라.

 

package cutBar;

import java.util.Scanner;

public class CutBar {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("막대 길이 : ");
		int length = input.nextInt();
		int beforeCutLength = length;
		System.out.print("인원 수 : ");
		int person = input.nextInt();
		int cutCount = 0; // 자른 횟수
		int canCutMen = 1; // 자를 수 있는 사람 수

		do {
			cutCount++;
			length = length - canCutMen;
			if (length <= 0) break;
			if (canCutMen < person) canCutMen++;
		} while (true);

		System.out.printf("막대 길이 : %d, 인원 수 : %d, 자른 횟수 : %d", beforeCutLength, person, cutCount);
	}
}

 

출력 결과 :

막대 길이 : 8

인원 수 : 3

막대 길이 : 8, 인원 수 : 3, 자른 횟수 : 4

문제 1 :

막대 길이 : 20

인원 수 : 3

막대 길이 : 20, 인원 수 : 3, 자른 횟수 : 8

문제 2 :

막대 길이 : 100

인원 수 : 5

막대 길이 : 100, 인원 수 : 5, 자른 횟수 : 22

728x90
반응형

댓글