반응형
문제링크: programmers.co.kr/learn/courses/30/lessons/42587
아이디어
- 처음 주어진 우선순위 리스트를 index 정보와 함께 저장한다. (처음의 location 정보로 답변해야하므로) : (index,value)
- value 기준으로 max 값을 찾아서 슬라이싱을 활용해 리스트 정렬을 다시해준다.
- 해당 max값은 기존 리스트에서 pop해주고, 새로운 리스트에 쌓아준다.
- 기존 리스트가 0이 될때까지 반복한다.
Solution1. (틀림)
처음 리스트에서 max값 기준으로 한번만 정렬하고 찾아주는 줄 알았다.
for문 안쓰고 싶어서 +,- 로 계산했다.
1) max 값 index보다 앞쪽에 있으면, max값 뒤로 밀리니까 +
2) max 값 index보다 뒤쪽에 있으면, max값 기준으로 순서가 땅겨지니까 -
하지만 이렇게하면 재정렬은 안된다.
테스트 케이스는 모두 통과했지만, 정렬이 한번더 되어야하는 케이스는 통과하지 못했다.
def solution(priorities, location):
# max 값의 인덱스
index_p = priorities.index(max(priorities))
# location이 index_p보다 앞에 있으면 순서 밀림
if location < index_p:
return location + len(priorities[index_p:]) + 1
else:
return location - index_p + 1
Solution2.
- 우선 재정렬 할때마다 index 값이 달라지므로, 초기의 index값을 저장해놓기 위해서 (index, value)로 저장되는 리스트를 만들었다
- 2중 리스트에서 max값 찾기: max(list, key = (lambda x: x[1])) -> max 함수 안에서 key 파라미터에 X[1]을 넣어주어서 value 기준 max 값을 찾았다.
- max 인덱스부터 마지막까지 앞쪽으로 오고, 0번째 인덱스부터 max-1 인덱스를 뒤쪽으로 보내 재정렬 해주었다.
- 재정렬된 인덱스에서 첫번째 인덱스 (max) 를 Pop 해서 기존 인덱스에서 빼주면서, 새로운 리스트에 추가해주었다.
- 기존 리스트의 길이가 0이 될때까지 해당 작업을 반복해준다.
- 처음 리스트에서 찾기 원했던 작업을 새로운 리스트에서 위치를 반환해준다. (출력순서)
def solution(priorities, location):
# 변수 선언
new_list = []
i=[(i,p) for i,p in enumerate(priorities)]
find_value = i[location]
while len(i)>0:
i_max=i.index(max(i, key=(lambda x: x[1])))
i = i[i_max:] + i[:i_max]
new_list.append(i.pop(0))
return new_list.index(find_value) + 1
반응형
'Today I Learned > Python 문제풀이' 카테고리의 다른 글
프로그래머스 lv1. 음양더하기 (zip 사용해서 간단하게) (0) | 2023.08.10 |
---|---|
[프로그래머스] lv0. 더크게 합치기 (0) | 2023.06.09 |
[프로그래머스] Lv1. 완주하지 못한 선수 (0) | 2020.11.06 |
[프로그래머스] Lv2. 기능개발 (스택/큐) (0) | 2020.10.31 |
[프로그래머스] Lv1. 나누어 떨어지는 숫자 배열 (0) | 2020.10.31 |