https://www.acmicpc.net/problem/3078
골드3.. 너무어렵다..
해당 문제의 핵심은 다음과같다..
Queue에 다담고 하나씩 뽑아서 비교하자! 가아닌
Queue에있는 친구들이 나랑 몇개의 쌍을 이룰수있는지! 가 핵심이다
import java.util.*;
import java.io.*;
public class 좋은친구 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
Queue<Integer>[] qlist = new LinkedList[21];
long answer = 0;
for(int i=0;i<21;i++) {
qlist[i] = new LinkedList<Integer>();
}
for(int i=0;i<N;i++) {
String line = br.readLine();
int sl = line.length();
if(qlist[sl].isEmpty()) {
qlist[sl].add(i);
continue;
}
while(!qlist[sl].isEmpty()) {
if(i-qlist[sl].peek()<=M) {
// 첫번째 값이 된다면 아래있는 뒷번호는 다가능하다 그래서더해줌
answer += qlist[sl].size();
break;
}
qlist[sl].poll();
}
qlist[sl].add(i);
}
System.out.println(answer);
}
}
스택 의경우는 스택 특성을 이용해서 난이도있는문제였는데
큐문제는 그냥 선입선출이다보니까 특성을 막 베베 꼬아서 어렵게 푸는게 없고 대부분
구현 + 큐 // 혹은 그리디 + 큐 이런느낌이라 다른 부분이 폼이안올라와서 어려운거같다..그래서..,
일단 큐는 여기까지하고 다른 파트하고 폼이올라오면 재도전!!하기..