프로그래머스 - 달리기 경주(java)CS/코딩테스트2023. 6. 1. 05:07
목차
프로그래머스 - 달리기 경주
출처 - https://school.programmers.co.kr/learn/courses/30/lessons/178871
문제 설명
문제 풀이
import java.util.*;
import java.util.stream.*;
public class Solution {
private static Map<String, Integer> playerInfo = new HashMap<>();
public String[] solution(String[] players, String[] callings) {
currentRanking(players);
Arrays.stream(callings).forEach(player -> {
int idx = playerInfo.get(player);
String frontPlayer = players[idx - 1];
players[idx] = frontPlayer;
players[idx - 1] = player;
playerInfo.put(frontPlayer, idx);
playerInfo.put(player, idx -1);
});
return players;
}
private static void currentRanking(String[] players) {
IntStream.range(0, players.length).forEach(index -> {
playerInfo.put(players[index], index);
});
}
}
첫 프로그래머스 문제 풀이다.
자동완성을 지원하지 않기 때문에 와일드 카드로 import를 사용했다.
실전 코테에서도 임포트 문을 다 외우지 못한다면 와일드를 써야 한다.
아이디어
처음에는 for문을 두 번 돌려서 players와 callings를 비교해서 넣는 방식을 생각했는데 시간초과가 났다.
그래서 Map<String, Integer>를 이용해서 key에는 플레이어 이름, value에는 순위를 넣었다.
이후 callings를 stream으로 만들어 player와 이름이 일치하면 player 배열순서를 바꿔주고 이 배열을 Map에 넣었다.
스킬
1. IntStream으로 범위를 지정하여 forEach 돌리기
2. 일반 배열을 Arrays를 이용하여 forEach 돌리기
'CS > 코딩테스트' 카테고리의 다른 글
리트코드 - 80. Remove Duplicates from Sorted Array II (0) | 2023.08.24 |
---|---|
리트코드 - 26. Remove Duplicates from Sorted Array (2) | 2023.08.24 |
리트코드 - 27. Remove Element (0) | 2023.08.24 |
리트코드 - 88. Merge Sort Array (2) | 2023.08.24 |
프로그래머스 - 추억 점수(java) (0) | 2023.06.01 |
@BW_tree :: TREE BLOG
남에게 설명할 때 비로소 자신의 지식이 된다.
포스팅이 도움되셨다면 하트❤️ 또는 구독👍🏻 부탁드립니다!! 잘못된 정보가 있다면 댓글로 알려주세요.