on my way
[GDSC Week2-4] 백준 3078번:: 좋은친구 (C++) 본문
반응형
* 생각한 아이디어 및 문제 풀이
0. 이름 길이별로 벡터를 생성한다.
1. 등수가 k만큼 차이나는 사람과 이름 길이를 비교하고 해당 길이의 벡터에 ++을 한다.
2. 만약 큐의 사이즈가 K 이상이라면 비교 숫자를 벗어난 것이므로 큐의 맨 앞에 위치한 문구를 삭제한다.
3. 이를 반복해서 좋은 친구를 출력한다.
* 코드
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N, K, len;
long long Good=0;
string input;
vector<int> v(21);
queue<int> q;
cin >> N >> K;
for(int i=0; i<N; i++){
cin >> input;
len = input.length();
Good += v[len];
if( int(q.size()) >= K){
v[q.front()]--;
q.pop();
}
v[len]++;
q.push(len);
}
cout << Good;
}
* 회고
자료형을 잘 확인해야겠다.
1초는 시간복잡도 계산할 시 1억이라는 점,
결과 값이 21억을 넘긴다면 int 대신 long long을 써야하는 점을 기억하자.
또한 위처럼 각각 벡터 큐를 따로 구현하는 것보다 더 쉽게 푸는 방법이 있지 않을까 하는 생각이 든다.
* 문제 링크 : https://www.acmicpc.net/problem/3078
3078번: 좋은 친구
첫째 줄에 N과 K가 주어진다. (3 ≤ N ≤ 300,000, 1 ≤ K ≤ N) 다음 N개 줄에는 상근이네 반 학생의 이름이 성적순으로 주어진다. 이름은 알파벳 대문자로 이루어져 있고, 2글자 ~ 20글자이다.
www.acmicpc.net
* 참고 링크 : https://slllju.tistory.com/77
[BOJ 3078] 좋은 친구 (풀이)
문제 https://www.acmicpc.net/problem/3078 (COCI 2012/2013) 요약 k 크기의 윈도우 안에 자신의 이름과 길이가 같은 이름이 몇 개 있는지 알아내자. 풀이 하나의 이름(길이 m)에 대해서 다음과 같은 처리를 한다
slllju.tistory.com
반응형
'algorithm > C++' 카테고리의 다른 글
[GDSC Week3-2] 백준 1182번:: 부분수열의 합 (C++) (0) | 2021.10.24 |
---|---|
[GDSC Week3-1] 백준 1489번:: 스타트와 링크 (C++) (0) | 2021.10.24 |
[GDSC Week2-3] 백준 2346번:: 풍선 터뜨리기 (C++) (0) | 2021.10.11 |
[GDSC Week2-2] 백준 10828번:: 스택 (C++) (0) | 2021.10.11 |
[GDSC Week2-1] 백준 10828번:: 스택 (C++) (0) | 2021.10.11 |