문제 :
https://school.programmers.co.kr/learn/courses/30/lessons/181851
해결 :
import java.util.HashMap;
import java.util.Collections;
import java.util.ArrayList;
class Solution {
public int solution(int[] rank, boolean[] attendance) {
HashMap<Integer, Integer> map = new HashMap<>();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i<rank.length; i++){
map.put(rank[i], i);
if(attendance[i]) list.add(rank[i]);
}
Collections.sort(list);
int a = map.getOrDefault(list.get(0), 0);
int b = map.getOrDefault(list.get(1), 0);
int c = map.getOrDefault(list.get(2), 0);
int answer = a*10000 + b*100 + c;
return answer;
}
}
1. HashMap 자료형의 map 변수에 랭킹 순위와 인덱스를 키와 값으로 준다.
2. 랭킹 순위를 정렬하기 위해 순서가 존재하는 list 자료형의 list 변수를 만들어, 참여 가능한 조건일 때 list 변수에 랭킹 순위 값을 넣어준다.
3. list 변수를 정렬한다.
4. map변수에서 list의 인덱스로 1~3 순위로 선발된 랭킹 순위의 값을 가져온다.
5. 값을 계산하여 반환해준다.
getOrDefault(Object key, Value DefaultValue)
- 찾는 키가 존재하다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
- key : 값을 가져오는 키
- DefaultValue : 키로 매핑된 값이 없을 경우 반한되는 기본 값
다른 사람 풀이 :
import java.util.Comparator;
import java.util.stream.IntStream;
class Solution {
public int solution(int[] rank, boolean[] attendance) {
return IntStream.range(0, rank.length)
.filter(i -> attendance[i])
.boxed()
.sorted(Comparator.comparing(i -> rank[i]))
.limit(3L)
.reduce((current, next) -> current * 100 + next)
.get();
}
}
rank 길이만큼 스트림 생성 -> attendance로 필터링 -> Stream로 변환 -> 정렬 기준을 rank로 정렬 -> 낮은 숫자 3개 선정 -> 100을 곱하고 다음 항목을 더하면서 차원 감소 -> int로 get
공부 :
HashMap 이란? 궁금하다면 자세한 내용은 하단 링크 ↓ ↓ ↓ ↓ ↓ ↓
https://my-archiver.tistory.com/202
'알고리즘 > [프로그래머스] JAVA' 카테고리의 다른 글
[코딩 기초 트레이닝] 그림 확대 (1) | 2024.03.05 |
---|---|
[코딩 기초 트레이닝] 특별한 2차원 배열 (0) | 2024.03.05 |
[코딩 기초 트레이닝] qr code (1) | 2024.02.12 |
[코딩 기초 트레이닝] 세로 읽기 (0) | 2024.02.12 |
[코딩 기초 트레이닝] 문자열 뒤집기 (0) | 2024.02.12 |