달리기 경주 문제
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)));
}
}
'알고리즘🍈' 카테고리의 다른 글
문제 풀이[Implementation] - 보드 게임 (0) | 2023.07.05 |
---|---|
문제 풀이[프.그.머] - 공원 산책, 바탕화면 정리 (0) | 2023.07.04 |
탐욕 알고리즘(Greedy) (0) | 2023.07.03 |
다이나믹 프로그래밍(동적 계획법) (0) | 2023.03.22 |
재귀함수, 재귀적 사고 (2) | 2023.03.15 |