-
5. 프린터코딩 테스트/Level 2 2020. 7. 20. 19:47반응형
https://programmers.co.kr/learn/courses/30/lessons/42587
파이썬(Python)
코딩량을 줄이기 위해 pop(0)을 썼는데
리스트가 길거나 빈번한 pop(0)이 필요할 땐 collections.deque를 사용하는 게 좋겠습니다.def solution(priorities, location): answer = 0 while priorities: if priorities[0] >= max(priorities): # 반복문 내의 max 함수는 속도에 영향을 많이 줍니다. answer += 1 priorities.pop(0) location -= 1 if location == -1: return answer else: priorities.append(priorities.pop(0)) location -= 1 if location == -1: location = len(priorities) - 1 return answer ''' 테스트 2 〉 통과 (0.59ms, 10.7MB) 테스트 8 〉 통과 (0.39ms, 10.7MB) 테스트 11 〉 통과 (0.33ms, 10.7MB) 테스트 17 〉 통과 (0.47ms, 10.6MB) '''
이 경우엔 바꾼 뒤 시간이 더 늘었습니다. ㅠ,.ㅠ
from collections import deque def solution(priorities, location): priorities = deque(priorities) answer = 0 while priorities: if priorities[0] >= max(priorities): answer += 1 priorities.popleft() location -= 1 if location == -1: return answer else: priorities.append(priorities.popleft()) location -= 1 if location == -1: location = len(priorities) - 1 return answer ''' 테스트 2 〉 통과 (0.67ms, 10.7MB) 테스트 8 〉 통과 (0.45ms, 10.7MB) 테스트 11 〉 통과 (0.34ms, 10.7MB) 테스트 17 〉 통과 (0.58ms, 10.7MB) '''
반복문 내의 max 함수의 회수를 줄여보겠습니다. 만족스럽네요.
def solution(priorities, location): answer = 0 max_priority = max(priorities) while priorities: if priorities[0] >= max_priority: answer += 1 priorities.pop(0) location -= 1 if location == -1: return answer max_priority = max(priorities) else: priorities.append(priorities.pop(0)) location -= 1 if location == -1: location = len(priorities) - 1 return answer ''' 테스트 2 〉 통과 (0.22ms, 10.7MB) 테스트 8 〉 통과 (0.16ms, 10.7MB) 테스트 11 〉 통과 (0.15ms, 10.8MB) 테스트 17 〉 통과 (0.16ms, 10.7MB) '''
자바 스크립트(Java Script)
function solution(priorities, location) { let count = 0 while (priorities.length != 1) { let doc = priorities.shift() location-- if (doc >= priorities.reduce((x, y) => y > x ? y : x)) { count++ if (location == -1) return count } else { if (location == -1) location = priorities.length priorities.push(doc) } } return ++count }
자바(Java)
import java.util.LinkedList; class Solution { public int solution(int[] priorities, int location) { LinkedList<Integer> que = new LinkedList<>(); for (int i = 0; i < priorities.length; i++) que.add(priorities[i]); var count = 0; while (!que.isEmpty()) { int temp = que.poll(); int max = temp; location--; for (int each : que) if (each > max) max = each; if (temp == max) { count++; } else { if (location == -1) location = que.size(); que.offer(temp); } if (location == -1) return count; } return -1; } }
고(Go, Golang)
func solution(priorities []int, location int) (count int) { for len(priorities) > 0 { if priorities[0] >= max(priorities[1:]) { count++ if location == 0 { return } priorities = priorities[1:] location-- } else { priorities = append(priorities[1:], priorities[0]) if location == 0 { location = len(priorities) - 1 } else { location-- } } } return } func max(arr []int) (max int) { for i, v := range arr { if i == 0 || v > max { max = v } } return }
반응형