본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] 01. 다이어트 프로그램 구현하기: 목표 몸무게 달성 프로그램

by 제이투더문 2024. 6. 16.

 

 

 안녕하세요, 작가 J입니다. 이번 포스팅부터 예고한 대로 Java Festival 문제 풀이를 하나씩 진행하도록 하겠습니다. Java Festival의 범위는 제 블로그의 07. 메소드까지입니다. 이미 잘 알고 계신 분들은 상관없지만, 모르시는 분들은 07. 메소드까지 어느 정도 학습한 뒤에 봐주시면 감사하겠습니다.

 

 문제를 단순히 풀이하는 것에 그치지 않고, 문제를 분석하고 해결하는 방법, 또 다른 풀이 등을 같이 해볼 예정입니다. 답만 필요하신 분들은 코드만 보셔도 됩니다. 또한 Java 초보자가 풀기에 적당한 문제이므로, 숙련된 분들은 안 보셔도 될 것 같습니다.

 

 

[Java Festival 01] 다이어트 프로그램 구현하기: 목표 몸무게 달성 프로그램

 

 현재 몸무게와 목표 몸무게를 각각 입력 받고 주차 별 감량 몸무게를 입력 받아 목표 달성 시 축하 메세지를 띄우는 프로그램을 구현하시오.

 

 

 풀이에 앞서 일단 문제를 먼저 파악해 보겠습니다. 실제로 업무를 할 때도 누군가의 요청(다이어트 프로그램)을 받았을 때, 코딩을 먼저 하진 않습니다. 요구사항을 먼저 분석하고, 그에 맞게 프로그램을 설계하고 코딩을 시작합니다. 일단, 문제를 먼저 파악해 보겠습니다.

 

문제 요약:

  • 현재 몸무게와 목표 몸무게를 입력 받음
  • 매주 감량한 몸무게를 입력 받음
  • 목표 몸무게 달성 시 축하 메세지를 출력하는 프로그램을 구현

 이는 문제를 간단히 요약한 사항입니다. 그 다음 출력문 예시를 살펴볼 필요가 있습니다. 먼저 출력문을 보면 현재 몸무게, 목표 몸무게, 그리고 감량 몸무게를 입력받는 것을 확인할 수 있습니다. 그에 따라서 Scanner 객체가 필요하고, 3개의 변수를 두면 편할 것 같습니다.

 

 또한 감량 몸무게는 계속 반복해서 입력을 받으므로, 저희가 배운 반복문을 사용하면 좋을 것 같습니다. 다만, 반복의 끝이 일정치 않습니다. 10kg을 2주 만에 감량해도 다이어트가 종료되고, 4kg씩 감량하면 5주면 다이어트가 종료됩니다. 1kg씩 감량하면 20주가 걸릴 수도 있습니다. 이렇게 끝이 일정치 않은 반복에는 while 문이 적합합니다.

 

그럼 제가 풀이한 코드를 보겠습니다.

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); // Scanner 객체 생성
		
		// 현재 몸무게 입력
		System.out.print("현재몸무게 : ");
		int currentWeight = sc.nextInt();

		// 목표 몸무게 입력
		System.out.print("목표몸무게 : ");
		int goalWeight = sc.nextInt();
		
		int weekCnt = 1; // 몇주차 문구를 위한 변수
		
		int lossWeight = 0; // 감량 몸무게 변수
		
		// 목표 몸무게 달성 전까지 반복
		while (currentWeight > goalWeight) {
			System.out.print(weekCnt + "주차 감량 몸무게 : ");
			lossWeight = sc.nextInt();
			
			currentWeight -= lossWeight;
			
			weekCnt++;
		}
		// 목표 몸무게 달성 메시지 출력
		System.out.println(currentWeight + "kg 달성!! 축하합니다!");
		
	}

}

 

 앞에서 빠진 내용은 1, 2주차 반복되는 문구를 위한 변수 weekCnt입니다. while 문이 언제까지 반복될 것인지 조건으로 현재 몸무게 > 목표 몸무게를 설정합니다. 현재 몸무게에서 감량 몸무게를 반복해서 빼주고, 현재 몸무게가 목표 몸무게와 같거나 작아질 경우 while 문을 종료시키는 형태입니다.

 

 이 방법 외에도 다른 방법으로 풀이하시는 분도 계실 겁니다. 프로그래밍에는 정답이 없습니다. 이러한 문제 풀이 포스팅이 여러분에게 도움이 되길 바랍니다. 감사합니다!