👀 문제
https://www.acmicpc.net/problem/2562
👊 도전
1. 설계
- 자연수의 값과 인덱스 번호를 둘 다 가지는 클래스 Number를 선언한다.
- Number형 배열을 선언한 후, 값을 넣는다.
- Arrays.sort()로 오름차순 정렬한다. 이때, Comparator을 이용하여 Number형 클래스를 정렬시킨다.
- 맨 마지막에 들어가있는 것이 최댓값이다.
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. 설명
- 자연수의 값과 인덱스를 담는 클래스를 선언한다.
- 숫자들을 정렬하면 기존 인덱스가 바뀌기 때문에 미리 저장해두어야한다. 따라서 Number클래스를 생성하여 숫자에 값과 처음 인덱스 번호를 저장한다.
- index는 처음 위치(인덱스)를, num에는 실제 값을 저장한다.
- Number형 배열을 선언하여 값을 저장한다.
- 이때 인덱스는 1부터 세므로 i+1이다.
- Arrays.sort()와 Comparator를 이용하여 오름차순 정렬한다.
- 배열 array는 Number클래스이므로 Arrays.sort()로 정렬할 수 없다. 어떻게 정렬시킬 것인지 Comparator의 compare을 overrride해야한다.
- Comparator가 다룰 인스턴스의 형은 Number이고, compare()에서 n1, n2의 num을 비교하여 오름차순으로 정렬한다.
👏 해결 완료!
다른 사람들은 for문으로 숫자를 순회하며 max를 찾을 때마다 index라는 변수를 두어 해당 값도 갱신시키는 방식으로 코드를 짰다.