[백준] 5543번 : 상근날드 - JAVA [자바]
https://www.acmicpc.net/problem/5543
5543번: 상근날드
문제 상근날드에서 가장 잘 팔리는 메뉴는 세트 메뉴이다. 주문할 때, 자신이 원하는 햄버거와 음료를 하나씩 골라, 세트로 구매하면, 가격의 합계에서 50원을 뺀 가격이 세트 메뉴의 가격이 된다. 햄버거는 총 3종류 상덕버거, 중덕버거, 하덕버거가 있고, 음료는 콜라와 사이다 두 종류가 있다. 햄버거와 음료의 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 출력하는 프로그램을 작성하시오. 입력 입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는
www.acmicpc.net
-
문제
백준 문제를 보다가 최근에 if문 카테고리로 추가된 문제다.
20.03.13 ) if 문 카테고리에서 실습 1로 변경되었다.
20.10.25 ) 실습 1 카테고리가 없어져 기타 문제로 카테고리를 옮겼다.
매우 간단한 문제이니 한 번 보자.
※ 주의할 점
- 버거 한 종류 + 음료 한 종류로 구성된다.
- 결과 값은 (가격의 합계 - 50) 이다.
- 2가지 방법을 이용하여 풀이한다.
먼저 가장 기본입력 방식인 Scanner 를 통해 풀어보고 다음으로는 다른 입력 방식인 BufferedReader 을 사용하여 풀어볼 것이다.
- 풀이
- 방법 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int burger = 2001;
int drink = 2001;
// 버거
for (int i = 0; i < 3; i++) {
int value = in.nextInt();
if (value < burger) { // 최솟값 찾기
burger = value;
}
}
// 음료
for (int i = 0; i < 2; i++) {
int value = in.nextInt();
if (value < drink) { // 최솟값 찾기
drink = value;
}
}
System.out.println(burger + drink - 50);
}
}
문제가 어렵지는 않다.
보면 먼저 문제에서 주어진 변수의 범위가 100~2000 이므로 최솟값을 찾을 것이기 때문에 burger, drink 변수를 2001 로 초기화 하면서 생성한다.
그리고 3개의 줄은 버거의 가격을 입력받기 때문에 for은 3번 반복해주면서 최솟값을 저장하고, 그 다음으로 음료는 두 줄이므로 두 번 반복하면서 최솟값을 저장한다.
그리고 마지막으로 반드시 둘 의 값을 더한 값의 -50 을 해주어야 한다.
- 방법 2
BufferedReader 을 사용하는 방법이다.
기본 알고리즘은 똑같고 입력방법만 다르다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int burger = 2001;
int drink = 2001;
// 버거
for (int i = 0; i < 3; i++) {
int value = Integer.parseInt(br.readLine());
if (value < burger) { // 최솟값 찾기
burger = value;
}
}
// 음료
for (int i = 0; i < 2; i++) {
int value = Integer.parseInt(br.readLine());
if (value < drink) { // 최솟값 찾기
drink = value;
}
}
System.out.println(burger + drink - 50);
}
}
그리고 주의할 점은 BufferedReader.readLine() 은 Scanner 와 달리 문자열로만 입력을 받기 때문에 반드시 Integer.parseInt() 로 String 에서 int 로 타입을 바꿔주어야 한다.
- 성능
위에서 부터 순서대로
채점 번호 : 18158484 - BufferedReader
채점 번호 : 18158478 - Scanner
입력의 경우는 확실히 Scanner 보다는 BufferedReader 가 빠른 걸 볼 수 있다.
- 정리
어려운 문제는 아니였다. 물론 필자의 방법 말고도 배열을 이용하는 방법도 있다.
그러나 아무래도 배열을 사용하면 사용해야하는 메모리가 많아지기 때문에 굳이 배열이 필요하지 않음에도 쓸 필요가 없다.
'JAVA - 백준 [BAEK JOON] > 기타 문제' 카테고리의 다른 글
[백준] 2523번 : 별 찍기 - 13 - JAVA [자바] (0) | 2020.03.13 |
---|---|
[백준] 10039번 : 평균 점수 - JAVA [자바] (0) | 2020.03.13 |
[백준] 2577번 : 숫자의 개수 - JAVA [자바] (36) | 2020.02.28 |
[백준] 2742번 : 기찍 N - JAVA [자바] (6) | 2020.02.18 |
[백준] 2741번 : N 찍기 - JAVA [자바] (11) | 2020.02.18 |