[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค :: ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜ (๋ฌธ์ œ ํ’€์ด, ์ฝ”๋“œ, ํ•ด์‹œ)

์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/42576#

๋ฌธ์ œ ์„ค๋ช…

์ˆ˜๋งŽ์€ ๋งˆ๋ผํ†ค ์„ ์ˆ˜๋“ค์ด ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•œ ๋ช…์˜ ์„ ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ์„ ์ˆ˜๊ฐ€ ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด participant์™€ ์™„์ฃผํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด completion์ด ์ฃผ์–ด์งˆ ๋•Œ, ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๋งˆ๋ผํ†ค ๊ฒฝ๊ธฐ์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • completion์˜ ๊ธธ์ด๋Š” participant์˜ ๊ธธ์ด๋ณด๋‹ค 1 ์ž‘์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์€ 1๊ฐœ ์ด์ƒ 20๊ฐœ ์ดํ•˜์˜ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž ์ค‘์—๋Š” ๋™๋ช…์ด์ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

participant completion return
[leo, kiki, eden] [eden, kiki] leo
[marina, josipa, nikola, vinko, filipa] [josipa, filipa, marina, nikola] vinko
[mislav, stanko, mislav, ana] [stanko, ana, mislav] mislav

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1
leo๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2
vinko๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #3
mislav๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ๋‘ ๋ช…์ด ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ํ•œ ๋ช…๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ช…์€ ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜

 

์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

int hashFunction(string s) {
    int result = 0;
    for (int i = 0; i<s.size(); i++) {
        result += s[i];
    }
    return result % 40;
}

void insertHashTable(vector<string>& table, int value, string s) {
    if (table[value].compare("")) {// ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
        for (int i = 0; i<40; i++) {
            if (!table[i].compare("")) {
                table[i] = s;
                break;
            }
        }
    }
    else
        table[value] = s;
}

bool checkValid(vector<string>& table, int index, string s) {
    if (!table[index].compare(s)) {
        table[index] = "";
        return true;
    }
    for (int i = 0; i<40; i++) {
        if (!table[i].compare(s)) {
            table[i] = "";
            return true;
        }
    }
    return false;
}

string solution(vector<string> participant, vector<string> completion) {
    string answer = "";
    vector<string> hashTable(40);

    // ๋„ฃ๊ธฐ
    for (int i = 0; i<completion.size(); i++) {
        int index = hashFunction(completion[i]);
        insertHashTable(hashTable, index, completion[i]);
    }

    //๊ฒ€์‚ฌ
    for (int i = 0; i<participant.size(); i++) {
        int index = hashFunction(participant[i]);
        if (!checkValid(hashTable, index, participant[i])) { // ์—†์œผ๋ฉด
            answer = participant[i];
            break;
        }
    }

    return answer;
}

 

ํ’€์ด

ํ•ด์‹œ ๋ฌธ์ œ๋ผ๊ณ  ํ•ด์„œ ํ•ด์‹œ ํ•จ์ˆ˜ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ใ…Ž... ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์‹์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋Š”๊ฐ‘๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

#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());

    for(int i=0; i<participant.size(); i++){
        if(i==completion.size()){
            answer = participant[i];
            break;
        }
        if(participant[i].compare(completion[i])){
            answer = participant[i];
            break;
        }
    }
    return answer;
}

sort๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ..

๋ฐ˜์‘ํ˜•