[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