목차
▸ 달리기 경주
▸ 공원 산책
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 달리기 경주
[시간 초과 코드]
import java.util.List;
import java.util.Arrays;
class Solution {
public List<String> solution(String[] players, String[] callings) {
List<String> playersList = Arrays.asList(players);
for(String calling : callings){
int indx = playersList.indexOf(calling);
String temp = playersList.get(indx-1);
playersList.set(indx-1, calling);
playersList.set(indx, temp);
}
return playersList;
}
}
[수정 코드]
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
class Solution {
public List<String> solution(String[] players, String[] callings) {
List<String> playersList = Arrays.asList(players);
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < players.length; i++) {
map.put(players[i], i);
}
for(String calling : callings){
int indx = map.get(calling);
String temp = playersList.get(indx-1);
playersList.set(indx-1, calling);
playersList.set(indx, temp);
map.put(calling, indx-1);
map.put(temp, indx);
}
List<Map.Entry<String, Integer>> entrys = new ArrayList<>(map.entrySet());
entrys.sort(Map.Entry.comparingByValue());
List<String> answer = new ArrayList<>();
for (Map.Entry<String, Integer> entry : entrys) {
answer.add(entry.getKey());
}
return answer;
}
}
❗️맵의 값들을 기준으로 정렬하는 부분에서 찾아보면서 하느라 시간이 걸렸다.
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 공원 산책
class Solution {
public int[] solution(String[] park, String[] routes) {
//초기 2차원 배열 세팅
char[][] array = new char[park.length][];
for (int i = 0; i < array.length; i++){
array[i] = park[i].toCharArray();
}
//초기 위치
int Sx = 0;
int Sy = 0;
for(int i = 0; i < array.length; i++){
for(int j = 0 ; j < array[0].length; j++){
if(array[i][j] == 'S'){
Sy = i;
Sx = j;
break;
}
}
}
//routes
for(int i = 0; i < routes.length; i++){
String[] route = routes[i].split(" ");
int direct = Integer.parseInt(route[1]);
boolean check = true;
if(route[0].equals("E")){
if(Sx + direct < array[0].length){
for(int j = Sx; j <= Sx+direct; j++){
if(array[Sy][j] == 'X'){
check = false;
break;
}
}
if(check){
Sx += direct;
}
}
}else if(route[0].equals("W")){
if(Sx - direct >= 0){
for(int j = Sx; j >= Sx-direct; j--){
if(array[Sy][j] == 'X'){
check = false;
break;
}
}
if(check){
Sx -= direct;
}
}
}else if(route[0].equals("N")){
if(Sy - direct >= 0){
for(int j = Sy; j >= Sy-direct; j--){
if(array[j][Sx] == 'X'){
check = false;
break;
}
}
if(check){
Sy -= direct;
}
}
}else if(route[0].equals("S")){
if(Sy + direct < array.length){
for(int j = Sy; j <= Sy+direct; j++){
if(array[j][Sx] == 'X'){
check = false;
break;
}
}
if(check){
Sy += direct;
}
}
}
}
int[] answer = new int[2];
answer[0] = Sy;
answer[1] = Sx;
return answer;
}
}