프로그래머스 Level 2 문제들 중 지금까지 푼 것들 중에서는 가장 쉽게 풀렸던 문제인 것 같다.
def solution(priorities, location):
count = 0
priority_list = []
for index, item in enumerate(priorities):
priority_list.append([item, index])
target = priority_list[location]
while True:
if priority_list[0][0]!= max(priority_list)[0]:
priority_list.append(priority_list.pop(0))
else:
if priority_list[0] == target:
count += 1
return count
else:
count += 1
del priority_list[0]
- 우선 중요했던 것은
location
에 주어진priorities
의 숫자를 어떻게 똑같은 다른 숫자들과 비교할 수 있을 것인가였는데, 이는enumerate()
함수를 사용하여 해결할 수 있었다. - 다음으로는
target
을enumerate()
함수를 사용하여 새로 만든priority_list
라는 배열에서 정의를 해주었다. - 다음으로는
while문
으로 체크를 시작해줬는데,priority_list
의 요소의 첫번째 요소가priority_list
의 가장 큰 요소의 첫번째 요소와 같지 않다면, 그 요소는 뒤로 보내주고 앞에서 삭제시켜줬다. - 만약 같았다면, 그 요소가 우리가 미리 정의해준
target
과 일치하는지 보고, 일치한다면count
에 1을 더한 값을 되돌려준다. - 만약 같지 않다면, 단순히
count
에 1을 더해주고, 그priority_list[0]
요소를 삭제해준다.
비교적 쉽게 풀었는데, 다른 사람의 풀이를 잠깐 보도록 하자
다른 사람의 풀이
다음은 프로그래머스에서 가장 많은 좋아요를 받은 문제 풀이이다.
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)]
answer = 0
while True:
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
return answer
여기서 주목할만한 점은 중간의 any
함수이다. any
함수는 전달받은 자료형의 element 중 하나라도 True일 경우 True를 돌려준다. 즉, 여기서 cur[1]
보다 q[1]
인 수가 queue
에 있다면, True
를 돌려주고, cur
값을 queue
에 다시 추가해주는 작업을 한다. 기본적으로 푸는 논리는 나의 풀이와 비슷했다고 볼 수 있다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: [완전탐색] 소수 찾기> Level 2 - 파이썬 (0) | 2020.12.11 |
---|---|
<프로그래머스 문제풀이: [스택/큐] 주식가격> Level 2 - 파이썬 (0) | 2020.12.10 |
<프로그래머스 문제풀이: [스택/큐] 기능 개발> Level 2 - 파이썬 (0) | 2020.12.05 |
<프로그래머스 문제풀이: 스킬트리> Level 2 - 파이썬 (0) | 2020.12.04 |
<프로그래머스 문제풀이: [1차] 다트> Level 1 - 파이썬 (0) | 2020.12.03 |