코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
[C++]
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
unordered_map<string, int> p; //participant 해시맵
for (int i = 0; i < participant.size(); i++){
if (p.end() == p.find(participant[i])) p[participant[i]] = 1; //존재x 1로
else p[participant[i]]++; //존재o ++
}
for (int i = 0; i < completion.size(); i++){
if (p.end() == p.find(completion[i])) answer = completion[i]; //존재x 답이고
else { //존재o value--
p[completion[i]]--;
}
}
for (int i = 0; i < participant.size(); i++){ //p탐색 -> 0보다 크면 completion에 없는사람
if(p[participant[i]]>0) answer = participant[i];
}
return answer;
}
1. participant={"kim", "kim"}, completion={"kim"} 인 경우, kim을 출력해야 한다.
즉, 중복을 허용하므로 unordered_map을 이용했다.
2. participant[]의 문자열을 unorder_map p에 +1씩 체크한다.
3. completion[]의 문자열은 unorder_map p에 -1씩 체크한다.
4. p를 하나씩 확인한다.
만약 p의 값이 0이 아니라면
즉, completion[]에 포함되어 있지 않아 +1 상태 그대로라면 == 완주하지 못한 선수 이다.
[JAVA]
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int i=0;
for(; i<completion.length; i++){
if(!participant[i].equals(completion[i]))
return participant[i];
}
return participant[i];
}
}
1. participant와 completion은 길이 차이가 1이다.
2. 그러므로 정렬하여 비교하면 n번만에 다른 것 하나를 찾을 수 있다.
'1d-1c > Programmers' 카테고리의 다른 글
Level1_예산 (JAVA) (0) | 2020.11.02 |
---|---|
Level1_두 개 뽑아서 더하기 (JAVA) (0) | 2020.10.31 |
Level1_크레인 인형뽑기 게임 (JAVA) (0) | 2020.10.31 |
Level1_K번째 수 (JAVA) (0) | 2020.10.31 |
도둑질 (C++) (0) | 2020.04.25 |