728x90
▶문제 : 코딩테스트 연습 - 달리기 경주 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▶코드 작성
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer = players;
map<string, int> map;//map[선수 이름]=선수 등수
for (int i = 0; i < players.size(); i++) map.insert(make_pair(players[i], i));
for (int i = 0; i < callings.size(); i++) {
int tmp = map[callings[i]];//해당 선수의 등수
swap(answer[tmp], answer[tmp - 1]);//앞 선수와 swap
map[answer[tmp - 1]]--;//해당 선수의 등수가 한 단계 높아짐
map[answer[tmp]]++;//앞 선수였던 선수의 등수가 뒤로 밀려남
}
return answer;
}
▶해석
map으로 "선수 이름"에 대응하는 선수 등수를 저장하였다.
for문으로 반복하여 answer 벡터에 실시간으로 등수를 바꿔주었고,
등수가 바뀌었으니 callings [i] == answer [tmp-1]가 되어
answer [tmp-1]의 등수가 높아졌으므로 -1
answer [tmp]의 등수가 낮아졌으므로 +1 해주었다.
이걸 c로 어떻게든 해보겠다고 6시간 동안 붙잡았지만 결국 포기,,, 이후 c++로 20분 컷,, 갈아타야 되나
728x90
댓글