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

프로그래머스 달리기 경주 (C++)

Prooni 2024. 10. 5. 18:50

안녕하세요~

오늘은 프로그래머스 "달리기 경주" 문제를 풀어볼게요!

 

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

LV.1 난이도라서 단순하답니다!!

호출되는 선수의 순서를 앞 순위 선수와 바꾸면 되는 문제인데요!

map에 선수 이름별 인덱스를 저장하고

선수 이름이 호출될때마다

players 벡터와 map의 value값을 갱신해줬어요!

 

전체코드는 아래 첨부합니다!

#include <string>
#include <vector>
#include <map>

using namespace std;

void Swap(vector<string>& strVec, int a, int b)
{
    string temp = strVec[a];
    strVec[a] = strVec[b];
    strVec[b] = temp;
}

vector<string> solution(vector<string> players, vector<string> callings) {
    vector<string>& answer = players;
    
    map<string, int> playersMap;
    for(int i = 0; i < players.size(); i++)
    {
        playersMap[players[i]] = i;
    }
    
    for(int i = 0; i < callings.size(); i++)
    {
        int curPlayer = playersMap[callings[i]];
        int targetPlayer = curPlayer - 1;
        
        Swap(answer, curPlayer, targetPlayer);
        playersMap[players[curPlayer]] = curPlayer;
        playersMap[players[targetPlayer]] = targetPlayer;
    }
    
    return answer;
}