[JAVA/백준] 1차원 배열: 최댓값

👀 문제

https://www.acmicpc.net/problem/2562

👊 도전

1. 설계

  1. 자연수의 값과 인덱스 번호를 둘 다 가지는 클래스 Number를 선언한다.
  2. Number형 배열을 선언한 후, 값을 넣는다.
  3. Arrays.sort()로 오름차순 정렬한다. 이때, Comparator을 이용하여 Number형 클래스를 정렬시킨다.
  4. 맨 마지막에 들어가있는 것이 최댓값이다.

2. 구현 (성공 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * 
 * @author HEESOO
 *
 */
class Number{
	int index;
	int num;
	public Number(int i, int n){
		this.index=i;
		this.num=n;
	}
}
public class Main {
	public static void main(String[] args) {
		Number[] array=new Number[9];
		Scanner input=new Scanner(System.in);
		int num;
		for(int i=0;i<9;i++){
			num=input.nextInt();
			array[i]=new Number(i+1, num);
		}
		Arrays.sort(array, new Comparator<Number>(){
			@Override
			public int compare(Number n1, Number n2){
				return n1.num-n2.num;
			}
		});
		System.out.println(array[8].num);
		System.out.println(array[8].index);
	}
}

 

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 자연수의 값과 인덱스를 담는 클래스를 선언한다.
    • 숫자들을 정렬하면 기존 인덱스가 바뀌기 때문에 미리 저장해두어야한다. 따라서 Number클래스를 생성하여 숫자에 값과 처음 인덱스 번호를 저장한다.
    • index는 처음 위치(인덱스)를, num에는 실제 값을 저장한다.
  2. Number형 배열을 선언하여 값을 저장한다.
    • 이때 인덱스는 1부터 세므로 i+1이다.
  3. Arrays.sort()와 Comparator를 이용하여 오름차순 정렬한다.
    • 배열 array는 Number클래스이므로 Arrays.sort()로 정렬할 수 없다. 어떻게 정렬시킬 것인지 Comparator의 compare을 overrride해야한다.
    • Comparator가 다룰 인스턴스의 형은 Number이고, compare()에서 n1, n2의 num을 비교하여 오름차순으로 정렬한다.

👏 해결 완료!

다른 사람들은 for문으로 숫자를 순회하며 max를 찾을 때마다 index라는 변수를 두어 해당 값도 갱신시키는 방식으로 코드를 짰다.