[Programmers/C++] 달리기 경주

2024. 7. 19. 20:14·🐸 Problem Solving/Programmers

💣 시간초과!

vector내에서 원하는 원소를 찾기위해 std::find()를 신나게 사용했다가 일부 테스트케이스에서 시간초과가 뜨는 문제가 생겼다... 

인자로 들어오는 vector들의 크기가 매우 큰 경우에 뜨는 것 같았다.

 

탐색하는데에 시간을 줄이기 위해 unordered_map<>형 인덱스를 생성하여 데이터를 찾을 때 인덱스를 참고하는 식으로 해결했다.

 

인덱스를 만들었으면.. 새로운 데이터에 대한 인덱스 '갱신'도 신경쓰자!

 

 

 


 

문제

얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다.

선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.

 

제한사항

 

 

 

 

 

입출력 예시

입출력 예시

 

입출력 예시

 

 

 


 

풀이 

#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;

vector<string> solution(vector<string> players, vector<string> callings) {
    vector<string> answer = players;
    unordered_map<string, int> players_index;

    //. map에 저장
    for (int i = 0; i < players.size(); ++i) {
        players_index[players[i]] = i;
    }

    for (int i = 0; i < callings.size(); ++i) {
        //. 추월한 선수의 현재 idx 찾기
        auto it = players_index.find(callings[i]);
        if (it != players_index.end()) {
            int idx = it->second;

            //. players_index 갱신!
            players_index[answer[idx]] = idx - 1;
            players_index[answer[idx - 1]] = idx;

            //. 추월한 선수와 추월 당한 선수의 자리 바꾸기.
            swap(answer[idx - 1], answer[idx]);
        }
    }

    return answer;
}

 

 

 


저작자표시 비영리 변경금지 (새창열림)

'🐸 Problem Solving > Programmers' 카테고리의 다른 글

[Programmers/C++] 주사위 게임 1  (0) 2024.07.23
[Programmers/C++] 코드 처리하기  (0) 2024.07.19
[Programmers/C++] 정수 제곱근 판별  (0) 2024.07.18
'🐸 Problem Solving/Programmers' 카테고리의 다른 글
  • [Programmers/C++] 주사위 게임 2
  • [Programmers/C++] 주사위 게임 1
  • [Programmers/C++] 코드 처리하기
  • [Programmers/C++] 정수 제곱근 판별
Mojing_
Mojing_
매일 매일 경험치를 쌓는 모징이의 개발 블로그입니다 :) This is Mojing’s Dev Blog where she gain experience points every day. :)
  • Mojing_
    모징이의 개발 경험치
    Mojing_
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 👻 Unity (3)
        • 🔧 기능 구현 (0)
        • 💡 유니티 팁 (0)
        • 📘 Unity 노트 (1)
        • 🏗️ 디자인 패턴 (0)
        • 🎨 그래픽 & 렌더링 (0)
      • 💻 Programming (14)
        • C (3)
        • C++ (9)
        • C# (0)
        • Swift (2)
      • 💾 Computer Science (16)
        • Algorithm (9)
        • Software Engineering (7)
      • 🐸 Problem Solving (108)
        • Programmers (41)
        • BOJ (67)
      • 🔋 ETC (0)
      • 💡 Quest Log (0)
  • 인기 글

  • 공지사항

  • 태그

    backtracking
    CS
    sort
    programmers
    탐색
    DFS/BFS
    Problem Solving
    C++
    오블완
    티스토리챌린지
    프로그래머스
    BOJ
    Design Pattern
    dynamic programming
    algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Mojing_
[Programmers/C++] 달리기 경주
상단으로

티스토리툴바