스터디/코딩테스트

python 코딩테스트 - 프로세스

공대생철이 2023. 11. 5. 23:06
728x90

출처 : 프로그래머스

 

처음 든 생각

- 반복문으로 하나씩 돌되 최댓값이랑도 비교를 해줘야겠네

- 만약 미뤄져야하는 놈이라면 append로 하면 되는데

- 완성된 놈은 어떻게 제거를 하지 -> 실제로도 이 부분에서 가장 고민을 많이했다.

 

 나의 답

def solution(priorities, location):
    arr = []
    for i in range(len(priorities)):
        for k in range(len(priorities)):
            if max(priorities) == priorities[k]:
                arr.append(k)
                priorities[k] = 0
            if len(arr) == len(priorities):
                break
        if len(arr) == len(priorities):
            break
    return arr.index(location) +1

 

프로세스의 작업 순서대로 차곡차곡 append할 빈 배열을 하나 만든다.

 

그 다음 for 문을 도는데 일단 모든 원소에 대한 순서를 찾아야하므로 그 횟수를 위한 for문을 크게 한 번 감싸고, 그 다음 최댓값이랑 비교를 해서 순서대로 arr에 쌓아주는 작업을 한다. 큰 반복문의 1회 째에 1순위 프로세스, 2회 째에 2순위 프로세스 이런식으로 찾는 방식이다.

 

이 때 완성된 프로세스의 제거는 우선순위에서 배제시키기 위하여 0으로 값을 바꿔준다. remove도 고려를 하였으나 시간복잡도에서 실패를 하게 되어 위와 같은 방법을 사용하였다.

 

그리고 프로세스를 리스트에 넣어줬으면 반복문을 탈출한다. 

 

순서는 1부터 시작하지만 인덱스는 0부터 시작하기에 1를 더해준 값을 리턴하면 답이 나오게 된다.

 

완성된 프로세스의 제거에서 가장 고민이 많이 되었다. 리스트에서 값을 제거해주는 과정은 pop이 아니면 시간이 복잡해지기 때문에 대안을 찾기 위해 시간이 많이 소요되었다.

 

728x90