본문 바로가기

BackEnd/Java

[JAVA] 조건문, 반복문을 이용한 문제 풀이 8(방정식)

728x90
반응형

 

목차

                                                                                                                           

1. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 1(윤년 계산기)

2. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 2(주사위 게임)

3. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 3(배수 판별기)

4. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 4(청구 금액 계산기)

5. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 5(다독왕)

6. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 6(피보나치 수)

7. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 7(출입증)

8. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 8(방정식)

9. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 9(숫자 맞추기 게임)

10. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 10(만원의 행복)

11. 2024.01.08 - [BackEnd/Java] - [JAVA] 조건문, 반복문을 이용한 문제 풀이 11(은행)

                                                                                                                           

 

 

자바의 조건문, 반복문을 이용한 문제 풀이를 진행해보겠습니다~

 

 

문제 8) 방정식

 

다음 ax + by = c 와 같은 일차 방정식이 있다.
a, b, c 차례대로 값을 입력 받고,해당 방정식을 만족하는 0을 포함한 자연수로 구성된 모든 해를 구해서
(x, y) 형태로 출력하는 프로그램을 만드시오.

예시) a, b, c 값을 순서대로 입력 받고 해당 방정식을 만족하는 모든 해를 출력합니다.
(x, y)
 . . .
(x, y)
모든 해를 출력 후 종료합니다. 

 

 

👉 출력방법

1. a값을 입력하세요 → [숫자 입력]
2. b값을 입력하세요 → [숫자 입력]
3. c값을 입력하세요 → [숫자 입력]
4. 방정식을 만족하는 모든 해를 출력한다.

 

 

👉  문제 풀이를 위한 Flow Chart

 


👉  문제 해답 코드

import java.util.Scanner;

public class Equation {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("a값을 입력하세요 : ");
		int a = sc.nextInt();
		
		System.out.print("b값을 입력하세요 : ");
		int b = sc.nextInt();
		
		System.out.print("c값을 입력하세요 : ");
		int c = sc.nextInt();
		
		boolean tf = false;
		
		if(a == 0) {
			if(c % b == 0) {
				System.out.println("(0, " + c/b + ")");
				tf = true;
			}

		} else if(b == 0) {
			if(c % a == 0) {
				System.out.println("(" + c/a + " ,0)");
				tf = true;				
			}				
		} else {			
			for(int i=0; i<=c/a; i++) {
				for(int j=0; j<=c/b; j++) {
					if(a*i + b*j == c) {
						System.out.println("(" + i + ", " + j + ")");
						tf = true;
					}
				}
			}
		}
		
		if(!tf) {
			System.out.println("만족하는 해가 없습니다.");
		}
		
		sc.close();
	}
}

 

 

👉  코드 해설

1. 입력을 위한 java.util의 Scanner 클래스를 가져온다.
2. 인스턴스 생성 후 양의 정수를 3가지 입력받고 변수 a, b, c 값에 저장한다.
3. tf라는 변수를 지정해 해의 존재 여부를 확인한다.
4. 조건문을 통해 a가 0인지 확인한다.
 4-1) 참이라면, c가 b의 배수인지 확인하고, 맞다면 해(0, c/b)를 출력한다.
5. 조건문을 통해 b가 0인지 확인한다.
 5-1) 참이라면, c가 a의 배수인지 확인하고, 맞다면 해(c/a, 0)를 출력한다.
6. 둘 다 0이 아니라면 중첩 for문을 통해 x절편, y절편만큼 반복한다.
 6-1) 만약, ax + by = c라면 해를 출력한다.
7. 만약, tf = false(해가 없다)면 만족하는 해가 없다는 문구 출력한다.

 

 

문제 풀이 시 a, b가 0인 조건들을 보면 해가 하나만 나올 수 있지만, 자연수에서만 동작해야하므로 if문이 좀 많이 사용된 것을 볼 수 있습니다. tf라는 변수를 통해 해가 있는지의 여부를 알 수 있도록 만들었습니다.

 

좀 더 간단하게 풀이가 가능할 수 있을 것 같은데 혹시나 코드를 보고 좀 더 간단하게 풀이하실 수 있는 분들은 답글 부탁드려요!!!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형