프로그래머스 코딩테스트 연습 입문단계 '진료순서 정하기' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120835
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓ 문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
※ 아래 입출력 예시를 참고하세요!
⚠️ 제한사항 및 입출력 예시
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예시 ▼
입력 (emergency)
[30, 10, 23, 6, 100]
출력 (return값)
[2, 4, 3, 5, 1]
// emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.
🔍 알고리즘 구상
이 문제를 보자마자 인덱스를 활용해서 풀어야겠다는 생각을 했습니다.
응급도가 클 수록 진료 순서는 빨라야(순서의 숫자는 작아야)합니다. 따라서 내림차순을 이용했습니다.
1. 먼저 응급도를 내림차순 정렬한 배열 만들기
ex) [100, 30, 23, 10, 6]
2. 기존 배열과 내림차순 배열을 비교
ex) [30, 10, 23, 6, 100] VS [100, 30, 23, 10, 6]
3. 비교해서 같을 때 결과 배열에 (내림차순 배열의 인덱스 +1) 값을 넣기
ex) [2, 4, 3, 5, 1]
✏️ 직접 구현한 코드
import java.util.Arrays;
class Solution {
public int[] solution(int[] emergency) {
int[] sort_em = Arrays.copyOf(emergency,emergency.length);
int[] answer = new int[emergency.length];
int tmp;
for(int i = 0; i < sort_em.length-1; i++) {
for(int j = i+1; j < sort_em.length; j++) {
if(sort_em[i] < sort_em[j]) {
tmp = sort_em[j];
sort_em[j] = sort_em[i];
sort_em[i] = tmp;
}
}
}
for(int i = 0; i < answer.length; i++ ) {
for(int j = 0; j < answer.length; j++ ) {
if(emergency[i] == sort_em[j]) {
answer[i] = j+1;
}
}
}
return answer;
}
}
🗣️ 코드 설명
- Arrays 클래스의 copyOf 메서드를 이용해 sort_em배열과 answer배열 각각에 매개 변수 emergency를 복사했습니다.
- for문을 이용해서 sort_em 배열을 내림차순 정렬했습니다.
- 또 for문을 이용해서 기존 배열과 내림차순한 배열을 비교했습니다. 그 안에서 emergency[i] 와 sort_em[j]와 같을 때 내림차순한 배열의 인덱스를 나타내는 j에 1을 더한 값을 answer배열에 넣었습니다.
⭐ 새로 알게된 점
- copyOf() : 배열을 복사할 때 사용 (Arrays 클래스의 메서드)
사용 예
int[] num = {1,2,3};
int[] arr = Arrays.copyOf(num,num.length); // (복사할 배열, 새로 만들 배열의 길이)
// arr = [1,2,3]
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 학교 수행평가 코딩테스트 - 문자열을 입력 받아 거꾸로 출력하기 (0) | 2023.03.06 |
---|---|
[JAVA] 학교 수행평가 코딩테스트 - 정수 5개를 배열에 저장하고 평균 출력하기 (0) | 2023.03.04 |
[JAVA] 프로그래머스 - 문자열 정렬하기 (1) (2) | 2023.03.02 |
[JAVA] 학교 수행평가 코딩테스트 - 3년 간의 1, 2학기 성적 입력받고 전체 평균 점수 구하기 (0) | 2023.03.02 |
[JAVA] 학교 수행평가 코딩테스트 - 정수 10개를 배열에 저장 후 가장 큰 수 출력 (0) | 2023.02.28 |
프로그래머스 코딩테스트 연습 입문단계 '진료순서 정하기' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120835
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓ 문제 설명
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
※ 아래 입출력 예시를 참고하세요!
⚠️ 제한사항 및 입출력 예시
- 중복된 원소는 없습니다.
- 1 ≤ emergency의 길이 ≤ 10
- 1 ≤ emergency의 원소 ≤ 100
입출력 예시 ▼
입력 (emergency)
[30, 10, 23, 6, 100]
출력 (return값)
[2, 4, 3, 5, 1]
// emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.
🔍 알고리즘 구상
이 문제를 보자마자 인덱스를 활용해서 풀어야겠다는 생각을 했습니다.
응급도가 클 수록 진료 순서는 빨라야(순서의 숫자는 작아야)합니다. 따라서 내림차순을 이용했습니다.
1. 먼저 응급도를 내림차순 정렬한 배열 만들기
ex) [100, 30, 23, 10, 6]
2. 기존 배열과 내림차순 배열을 비교
ex) [30, 10, 23, 6, 100] VS [100, 30, 23, 10, 6]
3. 비교해서 같을 때 결과 배열에 (내림차순 배열의 인덱스 +1) 값을 넣기
ex) [2, 4, 3, 5, 1]
✏️ 직접 구현한 코드
import java.util.Arrays;
class Solution {
public int[] solution(int[] emergency) {
int[] sort_em = Arrays.copyOf(emergency,emergency.length);
int[] answer = new int[emergency.length];
int tmp;
for(int i = 0; i < sort_em.length-1; i++) {
for(int j = i+1; j < sort_em.length; j++) {
if(sort_em[i] < sort_em[j]) {
tmp = sort_em[j];
sort_em[j] = sort_em[i];
sort_em[i] = tmp;
}
}
}
for(int i = 0; i < answer.length; i++ ) {
for(int j = 0; j < answer.length; j++ ) {
if(emergency[i] == sort_em[j]) {
answer[i] = j+1;
}
}
}
return answer;
}
}
🗣️ 코드 설명
- Arrays 클래스의 copyOf 메서드를 이용해 sort_em배열과 answer배열 각각에 매개 변수 emergency를 복사했습니다.
- for문을 이용해서 sort_em 배열을 내림차순 정렬했습니다.
- 또 for문을 이용해서 기존 배열과 내림차순한 배열을 비교했습니다. 그 안에서 emergency[i] 와 sort_em[j]와 같을 때 내림차순한 배열의 인덱스를 나타내는 j에 1을 더한 값을 answer배열에 넣었습니다.
⭐ 새로 알게된 점
- copyOf() : 배열을 복사할 때 사용 (Arrays 클래스의 메서드)
사용 예
int[] num = {1,2,3};
int[] arr = Arrays.copyOf(num,num.length); // (복사할 배열, 새로 만들 배열의 길이)
// arr = [1,2,3]
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 학교 수행평가 코딩테스트 - 문자열을 입력 받아 거꾸로 출력하기 (0) | 2023.03.06 |
---|---|
[JAVA] 학교 수행평가 코딩테스트 - 정수 5개를 배열에 저장하고 평균 출력하기 (0) | 2023.03.04 |
[JAVA] 프로그래머스 - 문자열 정렬하기 (1) (2) | 2023.03.02 |
[JAVA] 학교 수행평가 코딩테스트 - 3년 간의 1, 2학기 성적 입력받고 전체 평균 점수 구하기 (0) | 2023.03.02 |
[JAVA] 학교 수행평가 코딩테스트 - 정수 10개를 배열에 저장 후 가장 큰 수 출력 (0) | 2023.02.28 |