본문 바로가기
프로그래머스/C++

[프로그래머스/C++]프로그래머스 Level 1 : 달리기 경주 c++

by starfish22 2023. 4. 29.
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

댓글