1. 문제
상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다.
햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다.
햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오.
코드 1 (배열 사용)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] menu = new int[5];
for(int i=0;i<5;i++){
menu[i]=sc.nextInt();
}
int burger=menu[0];
int drink=menu[3];
for(int i=0;i<3;i++){
if(burger>menu[i]) burger=menu[i];
}
for(int i=3;i<5;i++){
if(drink>menu[i]) drink=menu[i];
}
System.out.println(burger+drink-50);
sc.close();
}
}
배열을 사용할 경우, int 형 배열 menu 안에 5개의 가격을 입력받는다.
버거는 3개, 음료는 2개이므로 버거 중에 가장 작은 값을 뽑아내기 위해서는 반복문을 0부터 2까지 돌리면 된다.
(배열의 index는 1부터가 아닌 0부터 시작)
음료의 경우는 3부터 4까지 돌리면 된다.
반복문 안에서 menu안의 값과 비교하여 변수 burger에 작은 값을 저장하면 된다.
따라서 반복문을 시작하기 전에 burger에 menu[0]을 넣거나 2000을 넣어 주어야 한다.
drink에는 menu[0]이 아닌 menu[3]을 넣어주어야한다.
코드 2 (배열 사용 X)
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int burger=2000; int drink=2000;
int b_cost, d_cost;
for(int i=0;i<3;i++){
b_cost=sc.nextInt();
if(burger>b_cost) burger=b_cost;
}
for(int i=3;i<5;i++){
d_cost=sc.nextInt();
if(drink>d_cost) drink=d_cost;
}
System.out.println(burger+drink-50);
sc.close();
}
}
배열을 사용하지 않을 경우, burger와 drink에 사용자가 입력할 수 있는 최댓값 2000을 넣어 선언한다.
사용자로부터 값을 입력받아 저장할 변수를 각각 b_cost, d_cost라 선언한다.
위와 같이 반복문을 돌려 burger와 drink에 최솟값을 저장한다.
3.
배열을 사용하면 메모리를 더 쓰는 줄 알았는데 메모리의 크기, 시간 모두 동일했다.
4. 링크
https://www.acmicpc.net/problem/5543
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[JAVA] 2523 : 별찍기 -13 (0) | 2020.07.23 |
---|---|
[JAVA] 백준 10817번 : 세 수 (0) | 2020.07.23 |
[JAVA] 백준 10039번 : 평균점수 (0) | 2020.07.19 |
[JAVA] 백준 1110번 : 더하기 사이클 (0) | 2020.07.18 |
[JAVA] 10951번 : A+B -4 (0) | 2020.07.18 |