[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]

처음 생각

  1. 배열의 원소 값을 꺼내 비교하여 값을 증가시키려 했음.

참고한 풀이

  1. 배열을 sorted함수를 사용하여 내림차순으로 정렬한다.(temp 라는 임시 배열에 저장)
  2. 기존 배열을 for 반복문으로 꺼냄.
  3. 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() : 리스트 자체를 정렬하여 기존 리스트에 저장.

참조 사이트

sorted() 문법정리!
진료순서 정하기 풀이!