※ 본 포스팅은 저의 공부 과정을 기록하기 위한 용입니다.
해당 문제의 정답을 기재해둔 것은 아니니 참고하여주시기 바랍니다.
문제
문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
풀이
위의 문제를 JAVA 로 풀기 위해서는 두개의 배열을 이용해서 이중반복문을 통해 풀면 된다.
class Solution {
public int[] solution(int[] emergency) {
// int[] answer = new int[emergency.length];
int el = emergency.length;
int[] answer = new int[el];
int[] emergencyT = new int[el];
int count = 1; // 카운트가 계속 늘어날 함수
int temp = 0; // 최고값 비교를 위한 임시값을 저장하는 함수
// answer[0] = 2;
// answer[1] = 4;
// answer[2] = 3;
// answer[3] = 5;
// answer[4] = 1;
// 만약에 emergencyT 라는 배열이 있다고 치면
// emergencyT라는 배열은 내림차순이라고 해보자. 그렇다면
// int[] emergencyT = {100, 30, 23, 10, 6}으로 나온다.
// 그렇다면 반복문을 돌면서 두 배열의 값이 같을 때 새로 만든 배열의 인덱스값에 +1을 해주면 되지 않을까?
// 그렇다면 바로 시작해보자.
// 일단 임시 배열에 값을 복사해준다.
for(int i = 0; i<el; i++) emergencyT[i] = emergency[i];
// 임시배열을 내림차순으로 바꿔준다.
for(int i = 0; i<el; i++) {
for(int j = i+1; j<el; j++) {
if( emergencyT[i]<emergencyT[j] ) {
int t = emergencyT[i];
emergencyT[i] = emergencyT[j];
emergencyT[j] = t;
}
}
}
// 정렬까지 다 끝났으므로 임시배열과 원래 배열을 이중반복문으로 돌리면서 answer에 값을 넣는다.
for(int i = 0; i<el; i++) {
for(int j = 0; j<el; j++) {
if(emergency[i] == emergencyT[j]) {
answer[i] = j+1;
}
}
}
return answer;
}
}
주의할 점은 배열의 인덱스값은 0부터 시작이므로
1만 더해서 숫자를 맞춰주면 된다.
결국 응급도라는건 내림차순으로 정렬했을 때의 인덱스값 + 1이다.
'코딩이야기 > JAVA' 카테고리의 다른 글
[JSTL] jstl 문법으로 다중 포이치문(c foreach)을 적용하고 싶을 때 (0) | 2023.01.10 |
---|---|
[JAVA] 프로그래머스 연속된 수의 합 코딩테스트 연습 문제 풀이 / 팩토리얼과 배열의 응용문제 (0) | 2022.11.04 |
[JAVA] 프로그래머스 문제 풀이 다음에 올 숫자 / 등비수열, 등차수열 판별 (0) | 2022.11.04 |
[JAVA] 사진 파일과 음악 파일의 FileNotFoundException (0) | 2022.11.01 |
[JAVA] java.lang.NullPointerException 에러 (0) | 2022.10.31 |