위클리 챌린지 > 4주차_직업군 추천하기
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/84325
C++ 풀이
#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
using namespace std;
#define CONTENTS 0
#define GAME 1
#define HARDWARE 2
#define PORTAL 3
#define SI 4
string solution(vector<string> table, vector<string> languages, vector<int> preference) {
vector <unordered_map<string, int> > whole_table(5);
for (int i = 0; i < table.size(); ++i) {
istringstream ss(table[i]);
string word; int score = 5;
getline(ss, word, ' ');
if (word == "CONTENTS") {
while (getline(ss, word, ' ')) {
whole_table[CONTENTS].insert({ word, score });
--score;
}
}
else if (word == "GAME") {
while (getline(ss, word, ' ')) {
whole_table[GAME].insert({ word, score });
--score;
}
}
else if (word == "HARDWARE") {
while (getline(ss, word, ' ')) {
whole_table[HARDWARE].insert({ word, score });
--score;
}
}
else if (word == "PORTAL") {
while (getline(ss, word, ' ')) {
whole_table[PORTAL].insert({ word, score });
--score;
}
}
else if (word == "SI") {
while (getline(ss, word, ' ')) {
whole_table[SI].insert({ word, score });
--score;
}
}
}
vector <int> score(5, 0);
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < languages.size(); ++j) {
if (whole_table[i].find(languages[j]) != whole_table[i].end()) {
score[i] += preference[j] * (*(whole_table[i].find(languages[j]))).second;
}
}
}
string answer = "CONTENTS";
int max_score = score[0];
for (int i = 1; i < 5; ++i) {
if (score[i] > max_score) {
if (i == 1)
answer = "GAME";
else if (i == 2)
answer = "HARDWARE";
else if (i == 3)
answer = "PORTAL";
else if (i == 4)
answer = "SI";
max_score = score[i];
}
}
return answer;
}
stringstream을 사용하여 문자열을 공백 단위로 잘랐다.
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[SWEA 1983] 조교의 성적 매기기 (0) | 2021.10.11 |
---|---|
[프로그래머스] 최소 직사각형 (0) | 2021.10.08 |
[프로그래머스] 없는 숫자 더하기 (0) | 2021.09.29 |
[SWEA 1285] 아름이의 돌 던지기 (0) | 2021.09.27 |
[백준 5052번] 전화번호 목록 (0) | 2021.09.19 |