Dev/Algorithm

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

VIPeveloper 2024. 5. 18. 12:27
728x90
반응형

문제

 

생각

  • 2차원 배열 간단 swap 문제라고 생각했지만 경기도 오산이었다.
  • 시간초과가 나며 fail..

코드

  • 실패했던 코드를 첨부한다.
public class Main {

    public static void main(String[] args) {
        System.out.println(solution(
                new String[]{"mumu", "soe", "poe", "kai", "mine"}
                , new String[]{"kai", "kai", "mine", "mine"});
    }

    public static String[] solution(String[] players, String[] callings) {
        String[] answer = {};
        // 1. callings를 순회하며
        for (int i = 0; i < callings.length; i++) {
            String calling = callings[i];
            // 2. players 위치를 변경
            for (int j = 0; j < players.length; j++) {
                if(calling.equals(players[j])) {
                    String tmp_player = players[j-1];
                    players[j-1] = players[j];
                    players[j] = tmp_player;
                    break;
                }
            }
        }
        return players;
    }
}

 

  • map 을 활용하라는 힌트를 보고 풀었더니 풀렸다.
import java.util.*;

public class Main {

    public static void main(String[] args) {
        System.out.println(solution(
                new String[]{"mumu", "soe", "poe", "kai", "mine"}
                , new String[]{"kai", "kai", "mine", "mine"}));
    }

    public static String[] solution(String[] players, String[] callings) {
        String[] answer = {};
        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < players.length; i++) {
            map.put(players[i], i+1);
        }
        for (String calling : callings) {
            int idx = map.get(calling); // 제끼는 사람
            map.put(players[idx-1], idx-1);
            map.put(players[idx-2],map.get(players[idx-2])+1);
            String tmp_player = players[idx-1];
            players[idx-1] = players[idx-2];
            players[idx-2] = tmp_player;
        }

        return players;
    }
}

다른 사람 코드

다른 사람의 코드도 비슷하다.

728x90
반응형