강의로 돌아가기
Uni_Mocha

왜 정확성 테스트 실패가 나올까요...? ㅠㅠㅠ

정확성 테스트 3까지는 통과로 나오지만 4부터는 실패로 나옵니다... 무슨 이유일까요....

작성중인 코드―solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <string>
#include <vector>
#include <map>

using namespace std;

string solution(vector<string> participant, vector<string> completion) {
    string answer;
    map<string, string> c;

    for (unsigned int i = 0; i < completion.size(); i++) {
        c.insert(make_pair(completion[i], completion[i]));
    }

    for (unsigned int i = 0; i < participant.size(); i++) {
        if (c.find(participant[i]) == c.end()) {
            answer = participant[i];
            return answer;
        }
        else {
            c.erase(participant[i]);
        }
    }
    return answer;
}
1 개의 답변
곽지구

map에서 participant[i] 키 값이 존재하지 않는 경우 participant[i]를 정답으로 반환하셨고,
map에서 participant[i] 키 값이 존재하는 경우 participant[i]키 값을 가진 요소를 삭제하도록 구현하신 것 같습니다.


using namespace std;

string solution(vector participant, vector completion) {
string answer;
map c;

for (unsigned int i = 0; i < completion.size(); i++) {
c.insert(make_pair(completion[i], completion[i]));
}

for (unsigned int i = 0; i < participant.size(); i++) {
if (c.find(participant[i]) == c.end()) {
answer = participant[i];
return answer;
}
//else문 삭제
}
return answer;
}


이렇게 하시면 70점이 나옵니다.
왜 그럴까요?

cout<<c.size()<<endl;
출력 값을 보시면 1이 나올 겁니다.
map에 key값은 유일해야하므로 같은 값이 여러개 들어갈 수 없기 때문입니다.

예외 케이스입니다.
입력값 〉 [mislav, mislav, mislav, ana], [mislav, mislav, mislav]
기댓값 〉 ana

위의 예외 케이스에 대해 질문자님의 알고리즘을 적용하면
mislav가 리턴되어 원하는 결과가 나오지 않게 됩니다.

else문을 지우셔야 질문자님이 생각하신 결과를 얻게 됩니다.

하지만 이 문제를 해결하고 나면 또 다른 문제가 있습니다.
참여자들 중에 동명이인이 존재하고, 동명이인이 완주하지 못한 경우입니다.
이 문제를 해결하기 위해서, 또 고민하는 과정이 필요합니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.