반응형
카카오 문제마다 등장하는 카카오프렌즈들.
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이 문제는 문제가 길긴 한데 어렵진 않다. 왜냐면 아래처럼 문제에 자료를 어떻게 구성하라고 표로 알려주기 때문이다. 실제로 문제 다 읽고 이해하는게 제일 오래걸리고, 그다음은 i를 j로 잘못써놓고 못찾아서 시간 다잡아먹었다.

문제에서 그려준 이 표를 배열로 구성하면 된다. 추가로 우리는 선물지수라는 값도 필요한데 그 값도 이 표를 배열로 구성해서 얻을 수 있다. 따라서 이 표를 배열로 구현하기만 하면 된다. 아래는 전체 코드이다.
#include <string>
#include <vector>
#include <map>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
int farray[50][50] = {0,};
int giftPoint[50] = {0,};
int solution(vector<string> friends, vector<string> gifts) {
//친구이름 - index 매칭 위한 맵
map<string,int> fmap;
for(int i = 0; i < friends.size(); i++) {
fmap[friends[i]] = i;
}
//선물 목록 순회하면서 배열 채우기
for(string gift : gifts) {
stringstream ss(gift);
string from = "";
string to = "";
ss >> from >> to;
farray[fmap[from]][fmap[to]]++;
}
//선물지수 계산하기
for(int i = 0; i < friends.size(); i++) {
for(int j = 0; j < friends.size(); j++) {
giftPoint[i] += farray[i][j];
}
}
for(int i = 0; i < friends.size(); i++) {
for(int j = 0; j < friends.size(); j++) {
giftPoint[i] -= farray[j][i];
}
}
//각각 교환할 선물 계산
int result[50] = {0,};
for(int i = 0; i < friends.size(); i++) {
for(int j = 0; j < friends.size(); j++) {
if(i==j) continue;
if(farray[i][j] > farray[j][i]) {
result[i]++;
continue;
}
if(farray[i][j] == farray[j][i]) {
if(giftPoint[i] > giftPoint[j]) {
result[i]++;
}
}
}
}
//최대로 받은 프렌즈의 선물개수 리턴
return *max_element(result, result + friends.size());
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 조이스틱 (C++) (0) | 2025.02.17 |
---|---|
프로그래머스 - 아이템 줍기 (C++) (0) | 2025.02.17 |
프로그래머스 - 단어 변환 (C++) (0) | 2025.02.16 |
프로그래머스 - 택배 상자 꺼내기 (C++) (1) | 2025.02.16 |
프로그래머스 - 피로도 (C++) (0) | 2025.02.15 |