관리 메뉴

Mini

프로그래머스 달리기경주 c++ // 해쉬맵 기본정렬됨(키값기준오름차순), 구현 본문

Algorithm/구현

프로그래머스 달리기경주 c++ // 해쉬맵 기본정렬됨(키값기준오름차순), 구현

Mini_96 2024. 3. 27. 20:55

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

0. 해쉬맵은 키값기준 오름차순으로 기본정렬되어 있다.

내림차순하려면  선언시 greater<type> 을 추가하면된다.

 

1. 의사코드

m1 : 이름, 인덱스 저장

m2 : 인덱스, 이름저장

1. calling(현재이름)으로 이전이름을 찾는다.

2. m1, m2를 각각 값에 알맞게 swap 해준다.

ex : m1[kai]=3 , m1[pve]=2  ---> m1[kai]=2, m1[pve]=3

m2[3]=kai, m2[2]=pve -> m2[2]=kai, m2[3]=pve

3. m2.second를 순차적으로 출력한다. (idx 오름차순으로 자동 정렬됨)

 

2. 전체코드

#include <bits/stdc++.h>

using namespace std;

vector<string> answer;
map<string, int> m1; //이름,현재인덱스 저장
map<int,string> m2; //현재인덱스, 이름 저장

vector<string> solution(vector<string> players, vector<string> callings) {
    
    for(int i=0;i<players.size();++i){
        v1.push_back({players[i],i});
        m1[players[i]]=i;
        m2[i]=players[i];
    }
    
    for(auto calling : callings){
        int idx = m1[calling];
        string prev_name = m2[idx-1];
        string cur_name=calling;
        
        m1[cur_name]=m1[cur_name]-1;
        m1[prev_name]=m1[prev_name]+1;
        
        m2[idx]=prev_name;
        m2[idx-1]=cur_name;
    }
    //sort(m2.begin(),m2.end()); //맵은 기본값으로 키값기준 오름차순 정렬이다!
    for(auto item : m2){
        //cout<<item.second<<" ";
        answer.push_back(item.second);
    }
    
    return answer;

}