티스토리 뷰

728x90

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

구현 Java

흠 단순히 큐 문제라기엔 변수를 좀 고려해야하는 문제였다.

우선순위대로 출력하는데 우선순위가 높은 문서가 올때까지 계속 뒤로 넘기는.

근데 또 포인터로 따라가면서 지정한 문서가 언제 출력되는지 출력하는 문제다.

 

접근방법

stream.anyMatch써서 뒤에 나보다 우선순위가 높은 문서가 있으면 뒤로 넘기고 아니면 pop했다.

매번 조건이 두가지로 나뉘는데

1. 우선순위가 높은문서가 뒤에 있을때

pop해주고 그 숫자 그대로 add해준다.

pop할때 마다 target문서 인덱스를 -- 해주고 0이면 q.size()-1 해줬다.

2. 나보다 우선순위가 높은 문서가 뒤에 없을때

주의* 이때만 cnt를 1 증가 시켜줘야한다. cnt는 target문서가 몇번째로 출력되는지를 담고 있는 변수

따라서 문서를 하나 출력할때마다 ++

이때 target문서가 인덱스 0, 즉 target문서를 출력할때가 됐다면 cnt를 출력하고 break

지금 출력하는 문서가 target문서가 아니면 target-- (이때는 target문서가 첫번째가 아닌 경우니까 맨뒤로 보내는 경우는 고려하지 않아도 된다.)

 

오답노트

for each문으로 큐 이터레이터 쓰려고 했는데 concurrent 어쩌구 오류가 났다. nullpoint오류 비슷한거라고 하는데

for each문 대신 for문을 쓰거나 while문을 쓰면 해결할 수 있다.

자바로 문제푸는거 아직 익숙하진 않지만 그래도 스트림쓰면서 하니까 편하다.

 

소스코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class I1966 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for(int t = 0 ; t < T ; t++){
            int N = in.nextInt();
            int target = in.nextInt();
            Queue<Integer> q = new LinkedList<>();

            for(int nn = 0 ; nn < N ; nn++){
                int p = in.nextInt();
                q.add(p);
            }

            int cnt = 0;
            while(!q.isEmpty()){
                if (q.stream().anyMatch(n->q.peek()<n)) {
                    int del = q.remove();
                    q.add(del);
                    if(target == 0){
                        target = q.size()-1;
                    }
                    else
                        target--;
                } else {
                    cnt++;
                    if(target == 0){
                        System.out.println(cnt);
                        break;
                    }else{
                        q.remove();
                        target--;
                    }
                }
            }
        }
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함