백준 17225 - 좋은 친구

Updated:

Java

17225 번 - 좋은 친구

문제

상근이네 반의 N명 학생들의 이름이 성적순으로 주어졌을 때, 좋은 친구가 몇 쌍이나 있는지 구하는 프로그램을 작성하시오. 좋은 친구는 등수의 차이가 K보다 작거나 같으면서 이름의 길이가 같은 친구이다.

접근 방법

구현

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String []args) throws IOException {        
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;
    	stk = new StringTokenizer(br.readLine());
    	int n = stoi(stk.nextToken());
    	int k = stoi(stk.nextToken());
    	
    	Queue<Long>[] nameLen = new LinkedList[21]; 
    	for(int i = 1; i <= 20; i++) {
    		nameLen[i] = new LinkedList<Long>();
    	}
    	
    	long cnt = 0;
    	for(long i = 1; i <= n; i++) {
    		int len = br.readLine().length();
    		
    		while(!nameLen[len].isEmpty() && i - nameLen[len].peek() > k) {
    			nameLen[len].poll();
    		}
    		cnt += nameLen[len].size();
    		nameLen[len].offer(i);
    	}
    	System.out.println(cnt);
    	br.close();
    }
    static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

난이도

★★★★★

후기

개선할 점