https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
스테이지별 실패율을 정렬하고, 그 인덱스를 반환해야 했기에,
Python의 dictionary와 같은 자료형에서 value 기준으로 정렬하면 좋겠다고 생각했다.
Java에서 Map은 Map.Entry 클래스들의 Set이다.
이로써, 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를 배열에 담아주면 끝
'공부 > 알고리즘' 카테고리의 다른 글
[프로그래머스 lv.2 - 150368] 이모티콘 할인행사 // Java 재귀, DFS (0) | 2023.04.16 |
---|---|
[프로그래머스 lv.2 - 64065] 튜플 // Java regex, Comparator 활용 (0) | 2023.04.12 |
[프로그래머스 lv.2 - 72412번] 순위 검색 // Java Map, Regex, BinarySearch 활용 (0) | 2023.04.11 |
[프로그래머스 lv.1 - 12915번] 문자열 내 마음대로 정렬하기 // Java Comparator 활용 (0) | 2023.04.09 |
Java, Python 알고리즘 cheat sheet (0) | 2023.04.07 |