여러분은 가까운 길을 멀게 돌아간다거나, 쉬운 문제를 어렵게 푸는것과 같이 간단한 일을 어렵게 처리해 보신적이 있나요?
제가 방금 그러고 왔습니다. 하하.
살다보면 이런 경우가 종종 있는것같습니다.
착각으로부터 시작하여 제대로 된 방향을 보지 못하고 흔들흔들 나아가는 것이지요.
그럼에도 불구하고 때로는 그 '나아감'에 집중하는것이 도움이 될 때도 있습니다.
물론 처음부터 올바른 방향으로 나아가는 것만큼 중요한 것도 없겠지만 결국 '목적지'를 향해 나아가는 것이 더 중요한 법이지요. 헤메도 괜찮습니다! 나아가십시오!
이번 문제 보도록 하겠습니다!
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
string tmp;
for (int i = 0; i < s.length(); i++) {
if (tmp.find(s[i]) == string::npos) {
answer.emplace_back(-1);
tmp += s[i];
}
else {
int j = i - 1;
while (s[j] != s[i]) {
j--;
}
answer.emplace_back(i - j);
}
}
return answer;
}
이 문제 또한 예전에 푼 경험이 있습니다.
코드의 흐름은 다음과 같습니다.
위와 같이 되겠군요!
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
vector<int> alpha(26,-1);
for(int i=0;i<s.size();i++){
int target= s[i]-'a';
if(alpha[target]==-1){
answer.emplace_back(-1);
alpha[target]=i;
}
else{
answer.emplace_back(i-alpha[target]);
alpha[target]=i;
}
}
return answer;
}
제가 새롭게 푼 풀이는 위와 같습니다. step을 보자면
하하. 간단한 문제이지요? 하지만 제가 고생했던 부분은 바로 앞 뒤로 검사를 실시했습니다.
만약 'banaana'라는 글자가 있다면 4번째 글자인 a의 경우 2칸 앞에 a가 있고 한 칸 뒤에 a가 있지요? 그래서 가까운 글자인 뒤쪽 a의 거리인 1을 answer에 넣어야 하는구나! 라고 착각을 했습니다.
하지만 이 문제의 초반부엔, 이러한 말이 적혀있습니다.
"자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳"
오늘의 교훈. 문제를 잘 읽자.
작은 도움이 되었길 바라며, 포스팅 마치겠습니다!