코딩테스트/프로그래머스
[프로그래머스] 달리기 경주 (C++)
Deff_a
2024. 3. 4. 15:56
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제

주어진 문제는 달리기 경주의 최종 순위를 반환하는 문제이다.
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;
}
