ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
    }

     

    반응형
Designed by Tistory.