[★1][백준2562번]최댓값 (JAVA)

Date:     Updated:

카테고리:

태그:

[★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
      61
      85
      8

내가 푼 풀이

이번 문제는 쉽다. 문제대로 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);
	}

}

BKJN 카테고리 내 다른 글 보러가기

댓글 남기기