알고리즘🍈

문제 풀이[프.그.머] - 달리기 경주, 추억 점수

Jeein0313 2023. 7. 3. 16:10

달리기 경주 문제

package org.example.programmers;

import java.util.ArrayList;
import java.util.Arrays;

import java.util.HashMap;
import java.util.stream.Collectors;

//달리기 경주
public class Sol1 {
    
    //나중 풀이
    public String[] solution1(String[] players, String[] callings){

        String[] answer = new String[players.length];

        HashMap<String, Integer> mappedByPlayers = new HashMap<>();
        //answer에 순위별로 player 이름 리턴해야 하므로..
        HashMap<Integer, String> mappedByRank = new HashMap<>();

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

        for(int i=0;i<callings.length;i++){
            int currentRank = mappedByPlayers.get(callings[i]);
            String currentPlayer = mappedByRank.get(currentRank);

            String frontPlayer = mappedByRank.get(currentRank - 1);

            mappedByPlayers.put(currentPlayer, currentRank - 1);
            mappedByPlayers.put(frontPlayer, currentRank);

            mappedByRank.put(currentRank - 1, currentPlayer);
            mappedByRank.put(currentRank, frontPlayer);

        }

        for(int i=0;i< players.length;i++){
            answer[i] = mappedByRank.get(i);
        }

        return answer;

    }
    
    //처음 풀이
    public String[] solution2(String[] players, String[] callings) {
        for(String name:callings){
            int index1 = findName(players, name);
            swap(players, index1, index1 - 1);

        }
        return players;
    }

    public int findName(String[] arr, String name){
        ArrayList<String> arrayList = Arrays.stream(arr).collect(Collectors.toCollection(ArrayList::new));
        return arrayList.indexOf(name);
    }

    public void swap(String[] arr, int index1, int index2){
        String temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }


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


        System.out.println(Arrays.toString(s.solution1(players,callings)));
        System.out.println(Arrays.toString(s.solution2(players,callings)));
    }
}

 

👉 처음에 배열로 문제를 풀었더니 시간 초과가 나서 HashMap으로 변경했더니 해결되었다.

 

추억점수 문제

package org.example.programmers;

import java.util.Arrays;
import java.util.HashMap;

//추억 점수
public class Sol2 {
    public int[] solution(String[] name, int[] yearning, String[][] photo) {
        int[] answer = new int[photo.length];

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

        for(int i=0;i<name.length;i++){
            mappedByName.put(name[i], yearning[i]);
        }
        

        for(int i=0;i<photo.length;i++){
            int sum=0;
            for(String s:photo[i]){
                if(mappedByName.get(s)!=null){
                    sum += mappedByName.get(s);
                }
            }
            answer[i] = sum;
        }

        return answer;
    }

    public static void main(String[] args) {
        Sol2 s = new Sol2();
        String[] name = new String[] {"may", "kein", "kain", "radi"};
        int[] yearning = new int[] {5, 10, 1, 3};
        String[][] photo = {{"may", "kein", "kain", "radi"}, {"may", "kein", "brin", "deny"},
            {"kon", "kain", "may", "coni"}};

        System.out.println(Arrays.toString(s.solution(name, yearning, photo)));
    }
}