GitHubSeob
C++ / 프로그래머스 / 달리기 경주 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
이름을 입력하면 등수를 알려주는 map인 name_num을 선언,
등수를 입력하면 이름을 알려주는 map인 num_name을 선언한다.
이름이 불린 선수들이 있는 callings 벡터를 탐색하면서 각각의 정보를 불러와
num, name, prev_name, prev_num에 값들을 저장한다.
그다음 서로 값들을 바꿔준다.
모든 탐색이 끝났으면 answer에 추가해 주고 return 한다.
코드
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
vector<string> answer;
int idx(0), num(0), prev_num(0);
string name(""), prev_name("");
unordered_map<string, int>name_num;
unordered_map<int, string>num_name;
for (idx = 0; idx < players.size(); ++idx) {
name_num.insert({ players[idx],idx + 1 });
num_name.insert({ idx + 1,players[idx] });
}
for (idx = 0; idx < callings.size(); ++idx) {
num = name_num[callings[idx]];
name = num_name[num];
prev_name = num_name[num - 1];
prev_num = num - 1;
name_num[prev_name]++;
name_num[name]--;
num_name[num] = prev_name;
num_name[prev_num] = name;
}
for (idx = 1; idx <= players.size(); ++idx) {
answer.push_back(num_name[idx]);
}
return answer;
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 바탕화면 정리 (0) | 2023.06.21 |
---|---|
C++ / 프로그래머스 / 개인정보 수집 유효기간 (0) | 2023.06.21 |
C++ / 프로그래머스 / 공원 산책 (0) | 2023.06.20 |
C++ / 프로그래머스 / 크기가 작은 부분 문자열 (0) | 2023.06.20 |
C++ / 프로그래머스 / 삼총사 (0) | 2023.06.19 |