Deff_Dev
[프로그래머스] 달리기 경주 (C++) 본문
문제
주어진 문제는 달리기 경주의 최종 순위를 반환하는 문제이다.
Player의 순서대로 1등부터 n등까지의 순위를 가지고, 이름이 불리면 순위가 한 단계씩 올라간다.
Map을 사용하여 플레이어 별 순위를 저장하고,
이름이 불릴 때마다 해당 플레이어의 순위를 조정하는 방법으로 문제를 풀이했다.
풀이
#include <string>
#include <vector>
#include<map>
// https://school.programmers.co.kr/learn/courses/30/lessons/178871
using namespace std;
map<string,int> playerMap; // 플레이어 개별 등수 저장 맵
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer;
// 플레이어 개별 등수 저장 및 answer에 Player 저장
for(int i =0; i<players.size(); i++){
playerMap[players[i]] = i;
answer.push_back(players[i]);
}
string tmp;
for(int i =0; i<callings.size(); i++){
// 순서를 변경할 Player의 현재 등수 저장
int rank = playerMap[callings[i]];
// 앞 순서인 플레이어와 등수 교체
tmp = answer[rank];
answer[rank] = answer[rank - 1];
answer[rank - 1] = tmp;
// 현재 순위 최신화
playerMap[callings[i]]--;
playerMap[answer[rank]] ++;
}
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 덧칠하기 (C++) (0) | 2024.03.07 |
---|---|
[프로그래머스] 추억 점수 (C++) (0) | 2024.03.06 |
[프로그래머스] 개인정보 수집 유효기간 (C++) (0) | 2024.03.05 |
[프로그래머스] 가장 많이 받은 선물 (C++) (0) | 2024.03.01 |
[프로그래머스] 게임 맵 최단거리 (C++) (0) | 2024.02.29 |