-
[프로그래머스/Level 1] 가장 많이 받은 선물알고리즘 문제풀이/프로그래머스 2024. 1. 7. 20:06
https://school.programmers.co.kr/learn/courses/30/lessons/258712
카카오 기출
'선물을 주고 받은 기록이 없는 경우'가 "A -> B 1개", "B -> A 0개"도 포함된다고 이해 하였는데, 말 그대로 서로 0개 주고 받은 경우를 의미한다. (조건을 잘 못 이해해서 시간 많이 잡아먹음)
조건을 꼼꼼하게 잘 읽어보면 어렵지 않게 구현할 수 있을듯
#include <string> #include <vector> #include <algorithm> #include <iostream> #include <sstream> using namespace std; int check[51][51]; int solution(vector<string> friends, vector<string> gifts) { int answer = -2147000000; unordered_map<string, int> um, giveUm, receiveUm, giftUm; // 선물을 주고 받은 횟수 저장 for (auto &gift : gifts) { um[gift]++; } // 추후 선물 지수 계산을 위해 이름별로 선물을 준 횟수와 선물을 받은 횟수를 각각 저장 for (auto &it : um) { string from, to; stringstream ss(it.first); int cnt = it.second; getline(ss, from, ' '); getline(ss, to, ' '); giveUm[from] += cnt; receiveUm[to] += cnt; } for (int i = 0; i < friends.size(); i++) { for (int j = 0; j < friends.size(); j++) { if (i == j || check[i][j] == 1) continue; int fromToCnt = um[friends[i] + " " + friends[j]]; int toFromCnt = um[friends[j] + " " + friends[i]]; if (fromToCnt > toFromCnt) { giftUm[friends[i]]++; check[i][j] = 1; } else if (fromToCnt == toFromCnt) { int fromIndex = giveUm[friends[i]] - receiveUm[friends[i]]; int toIndex = giveUm[friends[j]] - receiveUm[friends[j]]; if (fromIndex > toIndex) giftUm[friends[i]]++; else if (fromIndex < toIndex) giftUm[friends[j]]++; check[i][j] = 1; check[j][i] = 1; } } } // 최대값 구하기 for (auto &it : giftUm) { answer = max(answer, it.second); } return max(answer, 0); }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 1] 크기가 작은 부분 문자 (1) 2024.01.13 [프로그래머스/Level 1] 카드 뭉치 (0) 2024.01.09 [프로그래머스/Level 1] 대충 만든 자판 (1) 2024.01.04 [프로그래머스/Level 1] 바탕화면 정리 (0) 2024.01.02 [프로그래머스/Level 1] 공원 산책 (0) 2024.01.02