Deff_Dev

[프로그래머스] 달리기 경주 (C++) 본문

코딩테스트/프로그래머스

[프로그래머스] 달리기 경주 (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;
}