문제 풀기/C#
72. 달리기 경주
kagan-draca
2025. 2. 21. 16:12
using System;
public class Solution {
public string[] solution(string[] players, string[] callings) {
string[] answer = new string[] {};
return answer;
}
}
그냥 아무 생각 없이
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public string[] solution(string[] players, string[] callings)
{
List<string> list = players.ToList();
for(int i = 0; i < callings.Length; i++)
{
string passer = callings[i];
int index = list.IndexOf(callings[i]);
string overTakenPlayer = list[index - 1];
list[index - 1] = passer;
list[index] = overTakenPlayer;
}
return list.ToArray();
}
}
IndexOf와 swap을 이용해서 제출했더니...
시간 초과가 발생했다...
그래서, 어떻게 하면 시간을 단축 시킬 수 있을까 고민한 결과
IndexOf()에서 해당 요소를 찾는 과정이 오래 걸린다 판단하여
Dictionary에 선수 이름을 key 값으로 하고 index를 value로 저장한 후
반복문을 통해 swap 시켜주는 알고리즘을 작성했다.
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public string[] solution(string[] players, string[] callings)
{
Dictionary<string,int> order = new Dictionary<string,int>();
for(int i = 0; i < players.Length; i++)
{
order[players[i]] = i;
}
foreach(string element in callings)
{
int currentOrder = order[element];
string overTakenPlayer = players[currentOrder - 1];
players[currentOrder - 1] = element;
order[element] = currentOrder - 1;
players[currentOrder] = overTakenPlayer;
order[overTakenPlayer] = currentOrder;
}
return players;
}
}