Develop
[프로그래머스] 진료 순서 정하기 본문
문제
내풀이
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];;
Integer[] emergency2= new Integer[emergency.length];
int i = 0;
int arrSize = emergency.length;
// ememrgency 에 값 넣기
for(int a : emergency){
emergency2[i] = (Integer)a;
//System.out.println("1 : "+ emergency[i]);
//System.out.println("2 :" + emergency2[i]);
i++;
}
// emergency2를 내림차순 정렬
Arrays.sort(emergency2, Collections.reverseOrder());
// 순서대로 같은 값을 찾아서 같으면 answer에 순위 입력
for(int x = 0; x < emergency2.length; x++){ // 내림차순 배열만큼 반복
for(int y = 0; y < emergency.length; y++){ // 주어진 배열만큼 반복
if(emergency2[x] == emergency[y]){
answer[y] = x+1;
}
} //for2
} //for1
// for(int z =0; z < answer.length ;z++){
// System.out.println( "answer["+ z +"] : " + answer[z]);
// }
return answer;
}
}
느낀점
로직 : 내림차순 정리 후 다른 배열,같은 위치에 순위를 입력해줌
맥스값을 가져와서 할지 아니면 정리 후에 할지 고민했는데
sort함수 써보고 싶어서 이렇게 함!
Collections.reverseOrder()를 사용하려면 int형이 아닌 Integer형을 사용해야 한다
int는 오류남!!
다른 풀이1
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
for(int i = 0; i < answer.length; i++){
if(answer[i] != 0){
continue;
}
int idx = 1;
for(int j = 0; j < answer.length; j++){
if(emergency[i] < emergency[j]){
idx++;
}
}
answer[i] = idx;
}
return answer;
}
}
느낀점
로직 : 자신보다 큰 수만큼 카운트하여 순위를 결정하는 방법
정렬보다 신박했고 간단해서 매우 괜찮은 방법이라 생각함
그러나 첫번재 if문과 continue는 왜 넣었는지 모르겠다
여러번 테스트하다가 들어간 코드인데 안지운건가? 라고 생각했으나
=> 순위가 정해진 answer의 인덱스 번호의 값은 뛰어넘는 조건문이라고 한다
이미 값이 정해진 인덱스는 건너뛰기위한 목적이라고 한다 Good
다른 풀이2
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
Map<Integer, Integer> map = new HashMap<>();
int[] emergencySort = Arrays.copyOfRange(emergency, 0, emergency.length);
Arrays.sort(emergencySort);
int size = emergency.length;
for(int i = 0; i<emergencySort.length; i++){
int e = emergencySort[i];
map.put(e, size-i);
}
for(int i = 0; i<emergency.length; i++){
emergency[i] = map.get(emergency[i]);
}
return emergency;
}
}
느낀점
HashMap<>을 이용한 풀이
Map에 대해서 더 공부해봐야겠다
Arrays.copyOfRange() : 배열 복사 함수로 배열을 0에서부터 emergency.length 까지 복사해준다
그러나 이렇게 복사한 내용은 얕은 복사일 수 있므로 조심하자!
다른 풀이3
import java.util.*;
class Solution {
public int[] solution(int[] emergency) {
int[] answer = new int[emergency.length];
int[] sort = Arrays.copyOf(emergency, emergency.length);
Arrays.sort(sort);
Map<Integer, Integer> rank = new HashMap<Integer, Integer>();
int rankIdx = 1;
for (int idx = sort.length - 1; idx >= 0; idx--) {
rank.put(sort[idx], rankIdx++);
}
for (int idx = 0; idx < emergency.length; idx++) {
answer[idx] = rank.get(emergency[idx]);
}
return answer;
}
}
느낀점
이것도 Map을 이용한 풀이이다.
Map을 공부하고 다시 보도록 하자
주말에 자바 이론 정리할 것
- 배열
- 정렬 sort / 오름차순 / 내림차순
- Map (HashMap)
'개인 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 한 번만 등장한 문자 (0) | 2024.01.16 |
---|---|
[프로그래머스] 홀짝에 따라 다른 값 반환하기 (0) | 2024.01.15 |
[프로그래머스] 두 수의 연산값 비교하기 (0) | 2024.01.13 |
[프로그래머스] 더 크게 합치기 (0) | 2024.01.12 |
[프로그래머스] 문자열 곱하기 (0) | 2024.01.12 |