관리 메뉴

풀이 보관함

[C++] 백준 3078번: 좋은 친구 본문

problem solving/백준

[C++] 백준 3078번: 좋은 친구

viin 2022. 7. 2. 02:15

문제

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

 

풀이

이걸 큐로 풀 수 있다는 걸 알고 상상이 1도 안 되서 검색해서 봤다. 

(이제 내껄로 만들면 아무튼 성장한거임ㅇㅈㅇㅈ 피타고라스도 학교 다니고 교과서 보고 풀이도 봄;)

 

 

 

너무 똑똑함.. 어떻게 이런 생각을 했지.. 이제 이 지식은 제껍니다.

 

주의할 점은 output의 타입을 long long으로 지정해야 한다.

 

 

소스

#include <iostream>
#include <string>
#include <queue>

int main()
{
    int N = 0, K =0;
    long long result = 0;
    std::queue<int> students[21];
    std::string name;

    std::cin >> N >> K;
    for(int i=0; i<N; ++i)
    {
        std::cin >> name;
        
        while(!students[name.length()].empty() 
        	&& i - students[name.length()].front() > K)
        {
        	students[name.length()].pop();    
        }
        
        result+=students[name.length()].size();
        students[name.length()].push(i); // ex) students[2] = 3 // 글자수가 2인 3등을 표현
    }
    std::cout << result;
    return 0;
}