보기에는 엄청 간단해보이는데 무슨 조건을 줘야하는지 몰랐고 그 조건마다 뭘 실행해야 할지도 헷갈렸다. 일단 while문이 아닌 for문으로 어떻게 해보려고 해서 헤맸다.
일단 priorities 배열에 있는 index가 location인 놈을 -1로 만든다.
이 놈이 몇번째로 나오는 지가 중요해서 다른 값과 구분하기 위해서다.
원래 있던 놈은 num에 넣고 location에 있는 놈을 삭제하고 그 자리에 -1을 insert로 넣는다.
첫번째 if문 : 맨 처음에 -1이 있는데 max가 아닌 경우 출력을 해주면 안되고 뒤로 보내야한다.
elif문 : 맨 처음에 -1이 있고 그 값이 배열의 최대값보다 크거나 같으면 1번만에 출력된 것이므로 1을 return한다.
while문은 원하는 값이 출력될 때 까지 True 조건을 줘서 계속 돌린다.
m에는 현재 배열의 최대값이 들어간다. 물론 목표 값인 -1의 원래 값은 배열 안에서 제외되었으므로 따로 조건을 줘서 판단해야함
z는 배열의 첫번째 값
if문 : 첫번째 값이 목표 값이고 최대값보다 크거나 같다면 출력해야하므로 break로 while문을 빠져나가고 count를 return해서 몇번만에 출력된건지 출력한다.
elif 문 : 첫번째 값이 최대값이고 목표값보다 크면 진짜 최대값이 맞으므로 출력해줘야 한다. count를 1 증가 시키고 그 값을 지우고 배열의 마지막에 -10을 넣는다. 이유는 배열의 크기를 유지하면서 최대값이 출력됐음을 표시해야 하기 때문이다.
else문 : 이 경우 첫번째 값이 최대값이 아니므로 배열의 뒤로 보내준다.
def solution(priorities, location):
num=priorities[location]
count=1
del priorities[location]
priorities.insert(location,-1)
if priorities[0]==-1 and num!=max(priorities):
priorities.append(-1)
del priorities[0]
elif priorities[0]==-1 and num>=max(priorities):
return 1
while True:
m=max(priorities)
z=priorities[0]
if z==-1 and num>=m:
break
elif z==m and z>=num:
count+=1
del priorities[0]
priorities.append(-10)
else:
priorities.append(z)
del priorities[0]
return count
print(solution([2, 1, 3, 2],2))
print(solution([1, 1, 9, 1, 1, 1],0))
print(solution([2,2,2,1,3,4] ,3))
출처 https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 탑 (0) | 2018.10.05 |
---|---|
프로그래머스 가장 큰 수[아직 못 품..] (0) | 2018.10.05 |
띄어쓰기로 구분된 숫자로 이루어진 문자열 (0) | 2018.10.02 |
프로그래머스 k번째수 (0) | 2018.09.29 |
프로그래머스 문자열 내림차순으로 배치하기 (0) | 2018.09.29 |