[Java] 조건문과 반복문을 이용한 간단한 알고리즘 정리 - 1
윤년 계산기와 주사위 게임 두 가지 알고리즘 문제를 for문을 이용해 풀어봤습니다. 윤년 계산기는 입력받은 연도가 윤년인지 판단하고, 주사위 게임은 주사위를 세 번 굴려 나온 값에 따라 상금을 계산합니다. 이 문제들을 통해 자바에서의 조건문을 이용한 문제 해결 방법을 익힐 수 있습니다.
Jan 04, 2024
[윤년 계산기]
윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.
예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.
- 연도를 입력 받는다.
- 입력받은 연도가 윤년이면 "윤년입니다."를 출력
- 윤년이 아니라면 "윤년이 아닙니다."를 출력
LeafYearCalculator.java
package ch4;
import java.util.*;
public class YearCalculator {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("년도를 입력해주세요. -> ");
int year = scan.nextInt();
if(year%4==0) {
if(year%1000!=0 || year%400==0) {
System.out.println(year+"년은 윤년입니다.");
}else {
System.out.println(year+"년은 윤년이 아닙니다.");
}
}else {
System.out.println(year+"년은 윤년이 아닙니다.");
}
}
}
핵심 키워드
- 문제에서 제공하는 AND 조건과 OR 조건을 만족하도록 이중 if문을 이용해 코드를 작성한다.
[주사위 게임]
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
주사위를 3번 굴려 나온 값을 각각 차례대로 출력하고, 마지막 주사위 값이 출력되면 즉시 상금을 계산하는 프로그램을 작성 하시오.
- 참고) 1~6 사이의 랜덤 값 얻기 : (int)(Math.random() * 6 +1)
출력 예>
첫 번째 주사위를 굴리시겠습니까? -> [enter]
첫 번째 주사위 값 : [숫자]
두 번째 주사위를 굴리시겠습니까? -> [enter]
두 번째 주사위 값 : [숫자]
세 번째 주사위를 굴리시겠습니까? -> [enter]
세 번째 주사위 값 : [숫자]
총 상금은 [액수]입니다.
DiceGame.java
package ch4;
import java.util.*;
public class DiceGame {
public static void main(String[] args) {
int prize = 0;
int maxDice = 0;
Scanner scan = new Scanner(System.in);
System.out.printf("첫 번째 주사위를 굴리시겠습니까? -> ");
scan.nextLine();
int dice1 = (int) (Math.random() * 6) + 1; // Math.random에 괄호를 붙이지 않으면 int로 형 변환시 0이 반환된다.
System.out.println("첫 번째 주사위 값 : [" + dice1 + "]");
System.out.printf("두 번째 주사위를 굴리시겠습니까? -> ");
scan.nextLine();
int dice2 = (int) (Math.random() * 6) + 1;
System.out.println("두 번째 주사위 값 : [" + dice2 + "]");
System.out.printf("세 번째 주사위를 굴리시겠습니까? -> ");
scan.nextLine();
int dice3 = (int) (Math.random() * 6) + 1;
System.out.println("세 번째 주사위 값 : [" + dice3 + "]");
if (dice1 == dice2 && dice2 == dice3 && dice1 == dice3) {
prize = 10000 + dice1 * 1000;
} else if (dice1 != dice2 && dice2 != dice3 && dice1 != dice3) {
prize = (Math.max(dice1, (Math.max(dice2, dice3)) * 100));
} else {
if (dice1 == dice2) {
maxDice = dice1;
} else if (dice2 == dice3) {
maxDice = dice2;
} else {
maxDice = dice1;
}
prize = 1000 + maxDice * 100;
}
System.out.printf("총 상금은 [" + prize + "] 입니다.");
}
}
핵심 키워드
- 문제에서 제공하는 AND 조건과 OR 조건을 만족하도록 if문을 이용해 코드를 작성한다.
- 실행 순서에 따라 마지막 조건까지 값이 잘 전달되도록 else if문을 구성한다.
결론
해당 문제들을 풀면서 자바에서의 조건문을 이용한 문제를 익혀볼 수 있었다.
Share article