관리 메뉴

Tree's 개발일기

[자바] 달리기경주 본문

문제풀이/프로그래머스

[자바] 달리기경주

tree0123 2023. 7. 22. 13:36
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

핵심

달리기 랭킹 순대로, 배치하는 것이기 떄문에 선수의 이름과 함꼐 랭킹도 저장하거나 고려해줘야한다. 

 

처음에는 이중 for문으로 callings과 players안의 요소들을 모두 찾으려고 했으나, 

players의 최대 길이가 50,000이고, callings 최대길이가 1,000,000이기 때문에 시간초과가 날 것이 뻔했다. 

그래서 두값을 키-값 형태로 저장할 수 있는 hashmap형태를 사용했다.

 

여기서 키포인트는,

1. callings한 사람의 앞사람을 저장해놓아야 앞선수와 현재 선수를 바꿀 수 있다

2. mapp에 담아놓은 선수의 등수도 함께 변경해야한다

라는 점이다. 

 

<코드> 

import java.util.*;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] copy = Arrays.copyOf(players, players.length);
        
        Map<String, Integer> mapp = new HashMap<>();
        
        for (int i=0; i<players.length; i++) {
            mapp.put(players[i], i);
        }
        
        for (int j=0; j<callings.length; j++) {
            String temp = "";
            temp = copy[mapp.get(callings[j])-1]; //과거 사람 저장
            copy[mapp.get(callings[j])-1] = copy[mapp.get(callings[j])];
            copy[mapp.get(callings[j])] = temp;
            //맵에도 갱신해주기
            mapp.put(temp, mapp.get(callings[j]));
            mapp.put(copy[mapp.get(callings[j])-1], mapp.get(callings[j])-1);
        }
       
        
        return copy;
    }
}

 

728x90

'문제풀이 > 프로그래머스' 카테고리의 다른 글

[자바] 숫자변환하기  (0) 2023.07.24
[자바] 성격유형 검사하기  (0) 2023.07.22
미로 탈출  (0) 2023.07.20
[자바]신고 결과 받기  (0) 2023.07.17
삼각달팽이  (0) 2023.07.16
Comments