https://school.programmers.co.kr/learn/courses/30/lessons/181851
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문제 해석
rank배열에 각 등수가 저장되어있고 등수가 높은 3명을 전국 대회에 참석 시키려고 한다.
이때 attendatnce배열에 전국 대회에 참석 할 수 있는 여부가 저장되어있다.
예를 들어 1,2,3,4,5등이 있을 경우 1등이 false이면 2등, 3등, 4등이 전국 대회에 참석할 수 있는 구조이다.
이때 2등, 3등, 4등의 rank 배열에서 인덱스 값을 이용하여 10000 x 2등의 인덱스 + 100 x 3등의 인덱스 + 1 x 4등의 인덱스를 더한 값을 return한다.
* 구현 로직 *
1. MapA에 각 등수와 참석 여부를 저장한다.
2. MapB와 각 등수와 rank 배열의 인덱스 값을 저장한다.
3. MapA를 돌면서 true인 key값이 존재 할 때 MapB에서 인덱스 값을 찾아 10의 4승, 2승, 0승 차례대로 곱한 뒤 더한다.
코드
import java.util.*;
class Solution {
public int solution(int[] rank, boolean[] attendance) {
int answer = 0;
Map<Integer, Boolean> checkAttendance = new HashMap<>();
for (int i = 0 ; i < rank.length; i++) {
checkAttendance.put(rank[i], attendance[i]);
}
Map<Integer, Integer> checkIndex = new HashMap<>();
for (int i = 0; i < attendance.length; i++) {
checkIndex.put(rank[i], i);
}
int cnt = 4;
for (Integer key : checkAttendance.keySet()){
if(checkAttendance.get(key)) {
answer += checkIndex.get(key) * (int)Math.pow(10, cnt);
cnt -= 2;
}
}
return answer;
}
}
-> Map에 대입할 때 key값의 오름차순으로 자동 정렬 되는건지 확인하고 제대로 숙지해놔야겠다.
다른 사람들의 풀이를 확인 후
우선순위 큐를 이용한 멋진 코드 기록
import java.util.PriorityQueue;
class Solution {
public int solution(int[] rank, boolean[] attendance) {
PriorityQueue<Integer> que = new PriorityQueue<>((a, b) -> rank[a] - rank[b]);
for (int i = 0; i < attendance.length; i++) {
if (attendance[i])
que.add(i);
}
return que.poll() * 10000 + que.poll() * 100 + que.poll();
}
}
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Lv2] 순위 검색 (0) | 2023.11.23 |
---|---|
[프로그래머스 Lv2] 행렬 테두리 회전하기 (1) | 2023.11.22 |
[프로그래머스 Lv0] 자바 안전지대 (0) | 2023.07.29 |
[프로그래머스 Lv.1] 개인정보 수집 유효기간 (0) | 2023.06.13 |
[프로그래머스 Lv1] 같은 숫자는 싫어! (0) | 2023.06.13 |