[문제]
코딩테스트 연습 - 달리기 경주 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 풀이]
map과 swap을 이용해서 쉽게 풀 수 있는 문제였다.
1. map을 이용해서 players의 모든 위치를 저장해주고
2. callings를 반복문으로 방문하면서 map에서 저장해둔 위치를 파악.
3. players에서 파악한 위치와 파악한 바로 앞의 위치의 플레이어를 바꿔주고 map에서도 해당 숫자 2개를 바꿔준다.
[회고]
.
[코드]
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer;
map<string, int> mp;
for(int i = 0;i<players.size();i++){
mp[players[i]] = i;
}
for(int i = 0;i<callings.size();i++){
//callings가 부르는 플레이어의 위치 찾기.
int temp = mp[callings[i]];
//players에서 위치 바꾸기.
mp[players[temp]] -= 1;
mp[players[temp - 1]] += 1;
swap(players[temp],players[temp - 1]);
}
answer = players;
return answer;
}