[C++] Kick Start 2022 Round A - Typing Solution
아니 원래 큐를 이용해서 풀었고 대부분의 테스팅 결과도 멀쩡하게 나오는데 결과가 계속 틀렸다고 나와서 영문을 모르겠는 문제
#include <iostream>
#include <queue>
using namespace std;
int T;
string I, P;
int main(int argc, char** argv){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> T;
for(int i = 1; i <= T; i++){
long long ans = 0;
queue<char> q; // I 값 하나씩 저장
cin >> I >> P;
for(int j = 0; j < I.size(); j++){
q.push(I[j]); // I 값 큐에 저장
}
for(int j = 0; j < P.size(); j++){
int iChar = q.front(); //ASCII
if(iChar == P[j]){
q.pop(); // I값과 같은 경우
} else {
ans++; // delete 해야하는 문자
}
}
if(q.empty()){ // I값 만들 수 있는 경우
cout << "Case #" << i << ": " << ans << "\n";
} else {
cout << "Case #" << i << ": " << "IMPOSSIBLE\n";
}
}
return 0;
}
원래는 이렇게 풀었다.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll t, ans, i1, j, l1, l2, i2, t1, c;
string a, b;
cin>>t;
for(t1=1; t1<=t; t1++){
cin>>a;
cin>>b;
c=0;ans=0;
l1=a.size();
l2=b.size();
for(i1=0, i2=0; i1<l1 && i2<l2; ){
if(a[i1]==b[i2]){
c++;
i1++;
i2++;
}else{
i2++;
ans++;
}
}
cout<<"Case #"<<t1<<": ";
if(c==l1){
cout<<ans+(l2-i2)<<"\n";
}else{
cout<<"IMPOSSIBLE\n";
}
}
}
근데 다른 사람들 보니까 그냥 for문 사용해서 값 비교해서 같으면 한 칸 전진 아니면 P만 전진하고 ans 더해주고 이렇게 하더라?? 아니 내가 한거랑 똑같은거 아니냐? 쓰는 자료구조만 다르고 이해가 안되네 왜 내꺼만 틀리냐고 ㅡㅡ time 리밋 벗어났거나 메모리 문제가 뜨는 것도 아니고 걍 답 틀림ㅋ 이러는게 너무너무 화가남
심지어 그냥 for문 쓰는 것보다 저렇게 큐에 넣어서 하는 것이 개인적으로 더 깔끔하다는 생각이 든다.
그리고 너무 화나서 test case 다운 받아서 하나 돌려봤는데 9만 얼마 되는 값 제대로 출력해냄... 아니 뭐가 문제냐고 ㅡㅡ 아무튼 해결하지 못했다. 아무리 생각해도 맞는 것 같은데...
킥 스타트는 구글이 제시해주는 방식대로만 풀어야하나? 야박하네
Author And Source
이 문제에 관하여([C++] Kick Start 2022 Round A - Typing Solution), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/kick-start-2022-A-Typing-Solution저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)