⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
이 문제는 처음에 정답자가 많길래 도전을 했던 문제입니다. 슬쩍 문제를 읽어보니까 '?'의 앞 단어 맨 뒷글자 그리고 '?'의 뒷 단어 앞 글자만 알아내면 되는 문제더라고요? 그리고 중복되는 단어가 들어가면 안돼서 set을 사용해 중복 제거하기로 생각했습니다.
그리고 나서 바로 제출을 했는데, outofbound 라는 에러가 발생됩니다. ?가 첫번째이거나 마지막이라면? 이라는 생각을 해서 첫번째면 앞에 단어를 못보고 마지막이라면 마지막 + 1 단어를 볼 수 없구나? 라는 생각이 들었습니다.
그리해서 첫번째와 마지막일 경우의 수를 추가했습니다.
그리고 나서, 제출을 했는데 98%에서 outofbound 에러가 또 발생하게 됩니다. 흠.. 뭘까? 고민을 하던 찰나 n의 범위를 바라봤습니다. 1<= n <= 100 이더군요? 1을 보자마자 하나를 입력할 수 있는데 그 하나가 '?'라면?
그렇게해서 문제를 해결했습니다. 왜 정답율이 27%인지 생각하는 문제였습니다.
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int n,m,question;
set<string> st;
vector<string> v,c;
void init(){
cin >> n;
for(int i = 0; i < n; i++){
string str; cin >> str;
if(str == "?") question = i;
v.push_back(str);
st.insert(str);
}
cin >> m;
for(int i = 0; i < m; i++){
string str; cin >> str;
if(st.find(str) == st.end()){
c.push_back(str);
}
}
}
int main(){
init();
if(n == 1){
cout << c[0]; return 0;
}
char startChar,endChar;
if(question == 0){
endChar = v[question + 1][0];
} else if(question == n - 1){
startChar = v[question-1][v[question-1].length() - 1];
} else{
startChar = v[question-1][v[question-1].length() - 1];
endChar = v[question + 1][0];
}
for(int i = 0; i < c.size(); i++){
if(question == 0 && c[i][c[i].length() -1] == endChar){
cout << c[i];
return 0;
} else if(question == n - 1 && c[i][0] == startChar){
cout << c[i];
return 0;
} else if(c[i][0] == startChar && c[i][c[i].length() -1] == endChar){
cout << c[i];
return 0;
}
}
//98%
return 0;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/1660] 캡틴 이다솜 (0) | 2024.06.03 |
---|---|
[C++/30024] 옥수수 밭 (0) | 2024.05.27 |
[C++/1527] 금민수의 개수 (0) | 2024.05.21 |
[C++/1522] 문자열 교환 (0) | 2024.05.21 |
[백준/C++] 16943 숫자재배치 (0) | 2024.05.08 |