강의로 돌아가기
2minho

2,6,10,11,13,17,18,19에서는 실패하는데

논리적으로 어떤 문제가 있는 것 일까요

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(priorities, location):
    answer = 0
    first=priorities.index(max(priorities))
    for i in range(len(priorities)):
        answer+=1
        if first==location:
            break
        if priorities[first]>=priorities[location]:
            priorities[first]=0
            if location==priorities.index(max(priorities)):
                if max(priorities) in priorities[first:len(priorities)]:
                    first=priorities.index(max(priorities),first,len(priorities))
                else :
                    first=priorities.index(max(priorities))
            else:
                first=priorities.index(max(priorities))       
    return answer
2 개의 답변
shinebrightly

우선 반례를 보시면서 말씀드리자면 [2,3,3,"2",9,3,3], 3, return = 6이 나와야 하는데
minho님 코드에선 return = 7이 나옵니다. 이유는 가장 큰 값인 9의 오른쪽에 있는 3
2번째 인쇄 대상으로 지정되어야 하는데 minho님의 코드대로라면
first=priorities.index(max(priorities))에 의해 인덱스 1에 있는 3이 2번째 인쇄 대상으로 지정됩니다.
인쇄 순서를 표시한 리스트를 써드리자면 [7,4,5,"6",1,2,3]임을 참고하여
스택/큐 방식으로 뽑아서 비교하고 다시 넣는식으로 코드를 짜시던가 다른 방법을 구해봐야 할 것 같습니다!

shinebrightly

이해를 돕고자 순서가 결정되는 과정을 상세하게 써드리겠습니다.
[2,3,3,"2",9,3,3] -> 우리가 알고 싶은 것은 "2"가 몇 번째 인쇄 대상인지 알고자 합니다.
[3,3,"2",9,3,3,2]
[3,"2",9,3,3,2,3]
["2",9,3,3,2,3,3]
[9,3,3,2,3,3,"2"] -> 여기서부터 인쇄 순서가 결정됩니다.
[A,3,3,2,3,3,"2"] -> 인쇄 순서가 결정된 값들을 알파벳 순서대로 교체해본다면
[A,B,3,2,3,3,"2"]
[A,B,C,2,3,3,"2"] -> 2보다 큰 값이 존재하기 때문에 다시 맨 뒤로 보내집니다.
[A,B,C,D,3,"2",2]
[A,B,C,D,E,"2",2]
[A,B,C,D,E,"F",2] -> 이제 더이상 해볼 필요도 없이 순서가 전부 정해졌습니다.
우리의 정답은 "F"의 순서 즉 6return 해야 합니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.