티스토리 뷰
https://www.acmicpc.net/problem/1966
구현 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--;
}
}
}
}
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 17298] 알고리즘 101일차 : 오큰수 (0) | 2021.07.07 |
---|---|
[백준 5430] 알고리즘 10^2일차 : AC (0) | 2021.07.06 |
[백준 11656] 알고리즘 98일차 : 접미사 배열 (0) | 2021.07.02 |
[백준 11286] 알고리즘 97일차 : 절댓값 힙 (0) | 2021.07.01 |
[백준 1927] 알고리즘 96일차 : 최소 힙 (0) | 2021.06.30 |
- Total
- Today
- Yesterday
- 백트래킹
- 게임이론
- 이분탐색
- 프로그래머스
- 다이나믹프로그래밍
- Swift
- 웹크롤링
- 최단경로
- 트리
- 자바
- 수학
- dfs
- 가장 큰 수 프로그래머스
- 브루트포스
- c++
- 백준
- 가장 큰 수 Swift
- BFS
- 스택
- 최대힙
- 토마토
- 투포인터
- 알고리즘
- 그리디알고리즘
- 최소힙
- dp
- 파이썬
- 동적계획법
- 우선순위큐
- 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |