-
레벨1 : 달리기 경주(C++)코딩문제/프로그래머스 2023. 9. 14. 01:09
URL : https://school.programmers.co.kr/learn/courses/30/lessons/178871?language=cpp
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
가장 직관적이게 풀수 있는방법이 뭘까 하다가 map<int, string>, map<string, int> 버퍼 2개를 생성해놓는다.
1. 순위에 따른 이름찾기용
2. 이름에 따른 순위찾기용
위 2가지를 이용해서 추월하는 플레이어랑 그 앞에 선수의 Rank, Name을 각각 담아두는 임시변수를 선언하고 swap 하는과정을 거쳐줌으로 문제를 해결하였다.
다만 비효율적인 과정이 있었는지 테스트케이스에서 거의 2초가까이 나오는점이 있는걸보면 성능이 좋은 코드가 아닌건 확실한거 같다.
개선과정은 추후 진행할 수 있도록 해야겠다.
#include <string> #include <vector> #include <map> #include <iostream> using namespace std; vector<string> solution(vector<string> players, vector<string> callings) { map<int, string> playerData; map<string, int> playerData2; // Init Player Data for(int i=0; i<players.size(); ++i) { playerData[i] = players[i]; playerData2[players[i]] = i; } // Process Callings for(int i=0; i<callings.size(); ++i) { int beforeRank = 0, afterRank = 0; string beforePlayer = "", afterPlayer = ""; // CallingPlyaer afterRank = playerData2[callings[i]]; afterPlayer = playerData[afterRank]; // Player ahead of CallingPlayer beforeRank = playerData2[ playerData[afterRank - 1] ]; beforePlayer = playerData[beforeRank]; // Swapping PlayerData playerData[beforeRank] = afterPlayer; playerData2[beforePlayer] = afterRank; playerData[afterRank] = beforePlayer; playerData2[afterPlayer] = beforeRank; } vector<string> answer; for(auto data : playerData) { answer.push_back(data.second); } return answer; }
'코딩문제 > 프로그래머스' 카테고리의 다른 글
2레벨 : 124 나라의 숫자 (0) 2020.07.20 2레벨 : 가장 큰 수 (0) 2020.07.18 1레벨 : 자릿수 더하기 (0) 2020.07.15 1레벨 : 제일 작은 수 제거하기 (0) 2020.07.10 레벨1 : 이상한 문자 만들기 (0) 2020.07.10