*문제 출처는 프로그래머스에 있습니다.
문제 제목: 달리기 경주 (1단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/178871
문제 설명
나의 풀이
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer;
map<int, string> m1;
map<string, int> m2;
for (int i = 0; i < players.size(); i++) {
// m1에는 선수 이름을 value로 넣는다.
m1[i] = players[i];
// m2에는 선수의 등수를 value로 넣는다.
m2[players[i]] = i;
}
// 등수랑 이름을 복사해서 앞에 있는 선수와 바꾸는 작업이다.
for (int j = 0; j < callings.size(); j++) {
// m2의 등수를 idx로 복사한다.
int idx = m2[callings[j]];
// m1의 (등수 - 1)등 번째 등수를 복사한다.
string change = m1[idx - 1];
// m1 (등수 - 1)등에 제친 선수의 이름을 넣는다.
m1[idx - 1] = callings[j];
// 그리고 밀려난 선수는 앞에 있던 복사된 이름을 넣는다.
m1[idx] = change;
// m2도 똑같은 작업을 해준다.
m2[callings[j]] = idx - 1;
m2[change] = idx;
}
for (pair<int, string> s : m1) answer.push_back(s.second);
return answer;
}
※ 24.2.2 수정 : 위 그림에 보면 kai의 데이터가 없어진다고 적었는데 안 없어진다. key가 중복이 되면 사라지지 value는 중첩이 되도 상관이 없다.
※ 알아야 할 것
map은 key값이 중복이 될 수 없다.
map은 key기준으로 오름차순을 한다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 이진 변환 반복하기 / C++ (0) | 2024.02.07 |
---|---|
Programmers / 숫자 짝꿍 / C++ (0) | 2024.02.02 |
Programmers / 최빈값 구하기 / C++ (0) | 2024.01.31 |
Programmers / 실패율 / C++ (0) | 2024.01.31 |
Programmers / 유한소수 판별하기 / C++ (0) | 2024.01.30 |