반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
코드, 풀이
풀이 1
완주자에서 참여자를 뺀 나머지 결국 완주를 못한 사람은 제한사항을 따른 한명뿐이다. 생각을 해보니 그냥 completion에 대해서 먼저 map을 추가하고 키값이 false라면 그걸 리턴하면 되지 않을까?
근데 세번째 예시와 제한사항에 중첩이 있을 수 있다니 int로 선언하고 ++을 해준다. -> 0이라면 return해준다.
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
map<string,int> m; //참여자와 완주여부
for(int i = 0; i < completion.size();i++){
m[completion[i]] += 1;
}
for(int i = 0; i < participant.size();i++){
if(m[participant[i]] == 0)
return participant[i];
else
m[participant[i]] -= 1;
}
}
풀이 2
먼저 정렬을 해준다 -> 정렬을 한 두개를 같은 인덱스를 통해 비교를 해준다. 근데 여기서 다르게 된다면 결국 완주를 못한 유일한 한명에 대해서 걸러지게 된다.
사실 위의 풀이는 여러명일때 사용하기 좋을것 같고 이번 문제처럼 한명일때는 정렬하고 다르면 리턴
만약에 completion의 크기까지 같다면 정말 낮은확률로 가장 마지막 participant.size() - 1 인 인덱스가 완주를 못한것이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
sort(participant.begin(),participant.end());
sort(completion.begin(),completion.end());
for(int i = 0 ; i < completion.size();i++){
if(participant[i] != completion[i])
return participant[i];
}
return participant[participant.size() - 1];
}
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스] 택배상자 c++ (풀이,코드) (0) | 2023.09.08 |
---|---|
[프로그래머스 섬 연결하기] c++ (풀이,코드, 크루스칼 알고리즘) (0) | 2023.07.06 |
[프로그래머스 개인정보 수집기간] c++ (풀이,코드) (0) | 2023.07.05 |
[프로그래머스 신고결과받기] c++ (풀이,코드) (0) | 2023.07.05 |
[프로그래머스 가장 먼 노드] c++ (풀이,코드, bfs) (0) | 2023.07.04 |
댓글