[프로그래머스] 완주하지 못한 선수
Algorithm 2023. 1. 18. 15:37https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=cpp
중복을 허용 한다고 해서 multimap을 사용했지만 반례가 있는듯
다음 코드는 실패
#include<iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(vector<string> participant, vector<string> completion);
int main()
{
vector<string> participant = { "mislav", "stanko", "mislav", "ana" };
vector<string> completion = { "stanko", "ana", "mislav" };
string name = solution(participant, completion);
cout << name;
return 0;
}
using namespace std;
string solution(vector<string> participant, vector<string> completion) {
string answer = "";
std::multimap <string, int> map;
for (string name : participant) {
map.insert({ name, 0 });
}
for (string name : completion) {
//cout << name << "\n";
auto it = map.find(name);
if ((it->first == name)) {
it->second++;
}
}
for (pair<string, int> pair : map) {
/*cout << pair.first << " , " << pair.second << "\n";*/
if (pair.second == 0) {
answer = pair.first;
break;
}
}
return answer;
}
다시풀어보기
- 그래도 Hash 문제이고 개념을 이해하는 것이 중요하니 동일한 문제를 Hash로 풀어보자.
- Hash를 사용하더라도 결국 우리가 원하는 것은 Participant는 있고 Completion에는 없는 한 명을 찾는 것이다.
c++
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
string solution(vector<string> participant, vector<string> completion)
{
string answer = "";
unordered_map<string, int> map;
for (auto player : participant)
{
if (map.end() == map.find(player))
map.insert(make_pair(player, 1));
else
map[player]++;
}
for (auto player : completion)
map[player]--;
for (auto player : participant)
if (map[player] > 0)
{
answer = player;
break;
}
return answer;
}
int main(void)
{
vector<string> part = { "leo", "kiki", "eden" };
vector<string> comp = { "eden", "kiki" };
cout << solution(part, comp);
return 0;
}
c#
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _4458
{
class Program
{
static void Main(string[] args)
{
//completion의 길이는 participant의 길이보다 1 작습니다.
//참가자 중에는 동명이인이 있을 수 있습니다.
string[] participant = { "marina", "josipa", "nikola", "vinko", "filipa" };
string[] completion = { "josipa", "filipa", "marina", "nikola" };
Console.WriteLine(Solution(participant, completion));
}
public static string Solution(string[] participant, string[] completion)
{
string answer = "";
var dic = new Dictionary<string, int>();
for (int i = 0; i < participant.Length; i++) {
if (dic.ContainsKey(participant[i]))
{
dic[participant[i]]++;
}
else {
dic.Add(participant[i], 1);
}
}
for (int i = 0; i < completion.Length; i++) {
dic[completion[i]]--;
}
//foreach (var pair in dic) {
// Console.WriteLine("{0}:{1}", pair.Key, pair.Value);
//}
answer = dic.Where(x => x.Value > 0).Select(x => x.Key).FirstOrDefault();
return answer;
}
}
}
풀이
https://coding-grandpa.tistory.com/85
'Algorithm' 카테고리의 다른 글
[프로그래머스] 옹알이 (1) (0) | 2023.01.19 |
---|---|
[LeetCode] Two Sum (0) | 2023.01.19 |
[BOJ] 2003 수들의 합 2 (0) | 2023.01.18 |
[BOJ] 2979 트럭 주차 (0) | 2023.01.18 |
[BOJ] 10808 알파벳 개수 (0) | 2023.01.17 |