프로그래머스 달리기 경주[자력]

작성자 : 조회수 :


소요시간 : 30

 

 

 



 

느껴진다시간초과가

 

시간초과를 피하기 위해 Hash 자료구조를 이용해서 문제를 풀어보겠습니다.

 

아이디어는 이렇습니다.

 

1.     Hash에 이름과 인덱스 번호를 담아둡니다.

2.     Hash검색을 통해 인덱스를 찾아내 교체 번호를 바로 파악하고 앞 번호와 교체(swap)

3.     Hash맵에도 마찬가지로 교체된 번호를 업데이트를 진행합니다.

 

바로 코드 보겠습니다.

 

package Question;

import java.util.HashMap;

/**

 * 프로그래머스 달리기 경주

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

 *

 * 아이디어

 * 1. Hash 인덱스 번호 담아두고

 * 2. Hash 검색을 통해 인덱스를 바로 찾아내 교체 번호 확인 바로앞번호와 교체

 * 3. Hash맵에도 마찬가지로 업데이트 진행

 * */

public class RunningRace {

    public static void main(String[] args) {

    }

    public static String[] solution(String[] players, String[] callings) {

        HashMap<String, Integer> map = new HashMap<>();

        // HashMap 초기화 작업 진행

        for (int i = 0; i < players.length; i++) {

            map.put(players[i], i);

        }

        // callings 시작

        for (String s : callings){

            swap(players, map, map.get(s), map.get(s)-1);

        }

        String[] answer = players;

        return answer;

    }

    public static void swap(String[] players, HashMap<String,Integer> map , int changeIndex1, int changeIndex2 ){

        // 먼저 map 부터 업데이트

        map.put(players[changeIndex1] , changeIndex2);

        map.put(players[changeIndex2] , changeIndex1);

        String temp = players[changeIndex1];

        players[changeIndex1] = players[changeIndex2];

        players[changeIndex2] = temp;

    }

}

 

 

아이디어 처럼 swap 이 진행될때 Hash도 같이 업데이트 되는 것을 볼수 있습니다.