[프로그래머스] 자바 lv1 달리기 경주 풀이

환승의 개발로그·2023년 6월 4일
0

알고리즘

목록 보기
1/1

문제는 이렇게

코드를 입
import java.util.Arrays;

public class RunHores {

    public static String[] swapElements(String[] array, int index1, int index2) {
        String temp = array[index1];
        array[index1]=array[index2];
        array[index2]=temp;
        return array;
    }
    public static void main(String[] args) {
        String[] players = {"mumu", "soe", "poe", "kai", "mine"};
        String[] callings = {"kai", "kai", "mine", "mine"};
        String[] result = new String[0];

        for(String call : callings){
            int callIndex = Arrays.asList(players).indexOf(call);
            result = swapElements(players, callIndex-1, callIndex);
        }
        System.out.println(Arrays.toString(result));
        //String[] result ={"mumu", "kai", "mine", "soe", "poe"};
    }
}력하세요

이런식으로 풀어봤는데 채점중에 시간초과라고 뜬다 ㅠ
다시 풀어봐야겠다
인터넷에 풀이를 보니 HashMap을 사용하라고 한다

    public static void main(String[] args) {
        String[] players = {"mumu", "soe", "poe", "kai", "mine"};
        String[] callings = {"kai", "kai", "mine", "mine"};
        String[] result = new String[0];

        HashMap<String,Integer> playerMap = new HashMap<>();
        HashMap<Integer,String> rankedMap = new HashMap<>();

        for(int i=0; i<players.length; i++){
            playerMap.put(players[i],i);
            rankedMap.put(i,players[i]);
        }

        for(String call : callings){
            int callIndex = playerMap.get(call);
            int temp = callIndex-1;
            playerMap.put(call, temp);
            playerMap.put(rankedMap.get(temp),callIndex);
            rankedMap.put(callIndex,rankedMap.get(temp));
            rankedMap.put(temp,call);
        }
        return rankedMap.values().toArray(new String[rankedMap.size()]);
        
    }

HashMap을 사용해서 대용량 데이터가 들어와도 시간복잡도를 O(n)으로 잡을 수 있는 구조로 변경시켰다

profile
눈보다는 손으로 기억하기

0개의 댓글