자바로 어떻게 풀지 고민했었던 문제.

최근 들어서 ArrayList에 MemberDTO형식을 넣는 것을 드디어 이해했기 때문에 이번에도 이 방법을 써보려고 했다.

 

10의 9승까지 입력해야하므로 int대신 long을 사용. 10의 9승은 백만이고, long은 백만을 충분히 커버가능하다.

 

처음에는 HashMap을 사용해서 연봉과 선수이름을 쌍으로 넣어주고, 그 묶음들을 순서대로 ArrayList에 저장한 후

for반복문을 돌려가며 가장 높은 연봉을 가진 List번호의 선수이름값을 String expensive로 뽑아와서 저장하려고 했다.

그러다가 HashMap은 순서가 보장되지 않으므로 순차가 보장되는 TreeMap을 쓰게 되었고...

놀랍게도 TreeMap의 메소드 중에 lastKey()라는 놀라운 기능을 발견 ㅋㅋㅋ

그래서 저번에 고민했던 것과는 다르게 쉽게 마무리되었다.

 

완성된 코드는 아래와 같다.

 

package bjquiz2025;

 

import java.util.Scanner;

import java.util.TreeMap;

 

public class day0113 {

public static void main(String[] args) {

Scanner sc = new Scanner (System.in);

 

 

int times = sc.nextInt();

for (int i =0; i<times; i++) {

int N = sc.nextInt();

TreeMap<Long, String> map = new TreeMap<Long, String>();

for(int j=0; j<N; j++) {

long wage = sc.nextLong();

String name = sc.next();

map.put(wage, name); //연봉과 이름 정보를 map에 넣는다

}

String expensive = map.get(map.lastKey());

System.out.println(expensive);

}

 

}

}

 

결론

순서가 보장된 키와 밸류의 한 쌍 묶음을 쓰고싶을때는 TreeMap을 써보자

TreeMap에 있는 lastKey, firstKey는 각각 가장 큰 값, 가장 작은 값을 반환해주는 아주 멋진 기능이다.

(해당 기능은 해쉬맵에는 없다)


+ Recent posts