https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

스테이지별 실패율을 정렬하고, 그 인덱스를 반환해야 했기에,

Python의 dictionary와 같은 자료형에서 value 기준으로 정렬하면 좋겠다고 생각했다.

 

Java에서 Map은 Map.Entry 클래스들의 Set이다.

Map의 클래스멤버. KeyValueHolder라고 되어있다.

이로써, Map은 (key,value)의 입력이 들어올 때 마다 Map.Entry클래스를 인스턴스화해서 이를 저장하는걸 알수있다.

List< Map.Entry<Integer, Double> > 을 만든 뒤,이를 커스텀 Comparator를 통해 정렬하고, List를 돌면서 stage단계인 Key를 반환하게 하면 될거라고 생각했다.

 

Stage 별 해당 Stage에 머무르고 있는 사람을 Map으로 관리한 뒤,

로직에 맞는 실패율을 구해 entryList에 넣어준다. 삼항연산자는 연습삼아 써봤는데, 가독성이 안좋아 지양해야겠다.

1. stage i에 있는 사람이 0이면 failrate = 0

2. stage i에 사람이 있으면, 그 뒤 스테이지에 있는 사람(stage i를 깬 사람)의 합을 구해 나눗셈으로 실패율 계산

     ==> 이 때, afterstage == 0이면, 뒷 스테이지로 넘어간 사람이 없다는 뜻 + 0으로 나눗셈 안되므로

             failrate = 0으로 설정한다.

 

1.빨간부분이 comparator 정의. o1과 o2는 Map.Entry<Integer, Double>이며 getKey와 getValue 메소드를 사용할 수 있다.

문제의 로직대로 비교한 뒤, List의 sort함수를 사용해 정렬

 

2. Collections.reverseOrder() 메소드는 매개변수로 받은 comparator의 리턴값을 거꾸로 바꾼 Comparator를 반환한다.

 

나머지는 리스트를 돌면서 Key를 배열에 담아주면 끝

 

+ Recent posts