[Algorithm]진료 순서 정하기(programmers)
Intro
정렬 문제를 마주했는데, 인덱스 응용에 어려움을 겪었던 부분을 기록한다.
문제
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.
입출력 예시
emergency | result |
---|---|
[3, 76, 24] | [3, 1, 2] |
[1, 2, 3, 4, 5, 6, 7] | [7, 6, 5, 4, 3, 2, 1] |
[30, 10, 23, 6, 100] | [2, 4, 3, 5, 1] |
처음 생각
- 배열의 원소 값을 꺼내 비교하여 값을 증가시키려 했음.
참고한 풀이
- 배열을 sorted함수를 사용하여 내림차순으로 정렬한다.(temp 라는 임시 배열에 저장)
- 기존 배열을 for 반복문으로 꺼냄.
- index함수를 사용하여 temp 임시배열에 어느 위치에 있는 지 확인한 후 answer(결과값 배열)에 append 한다.
풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(emergency):
answer = []
# 1. sorted를 활용하여 기존 배열을 내림차순으로 정렬
temp = sorted(emergency, reverse=True)
print('temp : ', temp) # temp : [76, 24, 3]
for i in emergency:
print('i번째 인덱스 값', temp.index(i))
# 출력 : 3 번째 인덱스 값 2, 76 번째 인덱스 값 0, 24 번째 인덱스 값 1
#2. 인덱스 값에 + 1을 통해 각 번지의 순서를 append 해준다.
answer.append(temp.index(i)+1)
return print(answer)
solution([3, 76, 24])
# 결과 : [3, 1, 2]
문법 정리
sorted(정렬할 데이터)
- reversed를 하지 않았기에 기본값으로 오름차순 정렬된다.
sorted(정렬할 데이터, reversed =True/False)
- True : 내림차순
- False(기본값) : 오름차순
리스트.sort()
- 기존 리스트를 정렬해서 변환
- 여기서 sorted(정렬할 데이터)의 경우는 새로운 리스트 값을 반환하는 반면, 리스트.sort()는 기존 리스트를 정렬해서 변환만 한다.
회고
- 인덱스 응용에 대해 공부가 더욱 필요할 것으로 느껴지는 문제였다.
sorted(리스트)
와리스트.sort()
를 확실하게 구분하자.sorted(정렬할 데이터)
: 정렬하여 새로운 리스트에 저장.리스트.sort()
: 리스트 자체를 정렬하여 기존 리스트에 저장.