[★1][백준2562번]최댓값 (JAVA)
카테고리: BKJN
태그: Algorithm Java Coding Test
[★1][백준2562번]최댓값 (JAVA)
2562번 문제 ☞ https://www.acmicpc.net/problem/2562
난이도 ☞ [★1]
최소, 최대
- 문제
- 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다. - 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
-
첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
예제입력 예제출력 3
29
38
12
57
74
40
85
6185
8
- 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
내가 푼 풀이
이번 문제는 쉽다. 문제대로 9개의 자연수만 받게해두고, 그 값들을 for
문과 if
문으로 비교해서 출력하기만 하면 된다. 아래는 Scanner
로 구현했으며, BufferedReader
와 배열을 사용하지 않고 구현하는 것까지 한번 해보려고 한다.
[ 풀이 1 ]
메모리 :
17520KB
시간 :208ms
Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// 9개의 정수 값을 입력 받음
int[] arr = {s.nextInt(), s.nextInt(), s.nextInt(),
s.nextInt(), s.nextInt(), s.nextInt(),
s.nextInt(), s.nextInt(), s.nextInt()};
s.close();
int cnt = 0;
int max = 0;
int result = 0;
for (int i : arr) {
cnt++; // arr에서 하나씩 꺼낼 때마다 cnt +1 증가
if (i > max) { // max 초기 값이 0이니 0보다 크면 i로 저장, 하나씩 꺼내어 비교하면서 큰 값을 저장함
max = i; // 비교하여 큰 값을 max로 저장
result = cnt; // 몇 번째로 꺼냈는지도 저장
}
}
System.out.println(max); // 가장 큰 값 출력
System.out.println(result); // 가장 큰 값이 몇 번째 숫자인지 출력
}
}
Scanner
방식은 가장 기본적인 방법이다. 다음은 BufferedReader
방식입니다. 항상 BufferedReader
를 쓸 때는 자료형을 잘 보아야한다. 그 점만 유의한다면 BufferedReader
도 쉽게 구현할 수 있다. 코드는 아래와 같다.
[ 풀이 2 ]
메모리 :
14132KB
시간 :124ms
BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 9개의 정수 값을 입력 받음
int[] arr = new int[9];
// 9개의 정수 값을 받도록 for문 구현
for (int i = 0; i < 9; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
br.close();
int cnt = 0;
int max = 0;
int result = 0;
for (int i : arr) {
cnt++; // arr에서 하나씩 꺼낼 때마다 cnt +1 증가
if (i > max) { // max 초기 값이 0이니 0보다 크면 i로 저장, 하나씩 꺼내어 비교하면서 큰 값을 저장함
max = i; // 비교하여 큰 값을 max로 저장
result = cnt; // 몇 번째로 꺼냈는지도 저장
}
}
System.out.println(max); // 가장 큰 값 출력
System.out.println(result); // 가장 큰 값이 몇 번째 숫자인지 출력
}
}
풀이 3번은 Stream
을 이용한 방법입니다. Arrays.stream()
으로 스트림을 만들어준 뒤에 max()
로 최댓값을 구하고, getAsInt()
로 꺼내오면 되며 코드는 아래와 같다.
[ 풀이 3 ]
메모리 :
17764KB
시간 :208ms
Scanner
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[] arr = new int[9];
for (int i = 0; i < 9; i++) {
arr[i] = s.nextInt();
}
s.close();
int cnt = 0;
int max = 0;
int result = 0;
for (int i : arr) {
cnt++; // arr에서 하나씩 꺼낼 때마다 cnt +1 증가
if (i > max) { // max 초기 값이 0이니 0보다 크면 i로 저장, 하나씩 꺼내어 비교하면서 큰 값을 저장함
max = i; // 비교하여 큰 값을 max로 저장
result = cnt; // 몇 번째로 꺼냈는지도 저장
}
}
System.out.println(Arrays.stream(arr).max().getAsInt()); // 최대값을 구함
System.out.println(result);
}
}
마지막으로 풀이 4번은 Scanner
말고 성능이 더 좋은 BufferedReader
와 배열없이 한번 구현해보도록 하려고 한다. 하지만 문제의 카테고리가 배열이라는 점을 고려하여야 하며 이 풀이는 배열에 담을 필요가 있나라는 생각이 들어 풀어보게 되었다. 조금 코멘트를 말하자면 들어오면 바로바로 비교해서 조건에 맞게 저장하고, 출력하도록 구현하였다.
[ 풀이 4 ]
메모리 :
14120KB
시간 :128ms
Scanner
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class NO2562BOJ4 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = 0;
int max = 0;
for (int i = 0; i < 9; i++) {
int v = Integer.parseInt(br.readLine());
if (v > max) { // max 초기 값이 0이니 0보다 크면 i로 저장, 하나씩 꺼내어 비교하면서 큰 값을 저장함
max = v; // 비교하여 큰 값을 max로 저장
cnt = i + 1; // 몇 번째로 꺼냈는지도 저장
}
}
System.out.println(max);
System.out.println(cnt);
}
}
댓글 남기기