왜맞?
프로그래머스 완주하지 못한 선수(레벨 1) : https://programmers.co.kr/learn/courses/30/lessons/42576?language=cpp
//https://programmers.co.kr/learn/courses/30/lessons/42576
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
sort(participant.begin(), participant.end());
sort(completion.begin(), completion.end());
while(!completion.empty()) {
if(participant.back()==completion.back()) {
participant.pop_back();
completion.pop_back();
}else{
return participant.back();
}
}
//return participant.back(); // 이 부분을 주석 제거해야 올바른 코드.
//participant.push_back("test"); // 이 부분을 주석 제거하면 signal: aborted (core dumped)
}
C++ | Clang++ 10.0 (C++17) | clang++ -std=c++17 -O2 -Wno-unused-result -o FILENAME |
해당 코드는 틀린 알고리즘 풀이이다. 하지만 프로그래머스 제출하면 정답이 뜬다;
participant 사이즈가 completion 사이즈보다 클 경우 리턴이 이루어 지지 않는 경우가 있기 때문이다.
ex) p = { "a", "b", "c", "d"}, c = {"b", "c", "d"}
프로그래머스가 사용하는 컴파일 옵션이 우리가 평소 사용하는 IDE와 달라서 그런지 캐시 문제가 발생한거 같다.
-> return이 없는데 컴파일 된 경우, 이전에 호출된 return register에 있는걸 그대로 사용하는 경우가 있는데, 그 경우가 우연히 맞아 떨어져서 명시적으로 리턴을 하지 않아도 정답 처리된것 같다.
마지막에 의미 없는 함수의 리턴값을 생성하면 signal: aborted (core dumped) 가 발생한다.
'Algorithm > Intermediate' 카테고리의 다른 글
string 정리 (0) | 2022.01.22 |
---|---|
문자열 매칭 알고리즘[3](트라이 & 아호 코라식)[String Searching Algorithm, Trie & Aho-Corasick] (0) | 2022.01.15 |
문자열 매칭 알고리즘[2](KMP)[String Searching Algorithm, Knuth-Morris-Pratt] (0) | 2021.10.31 |
문자열 매칭 알고리즘[1](라빈 카프)[String Searching Algorithm, Rabin-Karp] (0) | 2021.10.31 |
벡터의 활용(Vector, C++) (0) | 2021.10.16 |