https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
문제는 매우 간단하지만 단순히 반복문으로 플레이어 이름을 찾게되면 시간초과가 발생한다.
따라서 HashMap을 통해 이름과 순위를 저장해 빠르게 선수를 찾아 순위를 업데이트 하도록 구현.
코드
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
// 이름 순위
HashMap<String, Integer> p_rank = new HashMap<>();
for(int i=0; i<players.length; i++){
// 순위는 1부터 시작
p_rank.put(players[i], i+1);
}
for(int i=0; i<callings.length; i++){
// 호출된 사람의 순위를 감소
String callP=callings[i];
int rank = p_rank.get(callP);
p_rank.put(callP, rank-1);
// 호출된 사람 앞사람의 순위를 증가
String frontP = players[rank-1-1];
p_rank.put(frontP, rank);
// 바뀐 순서에 맞게 players 업데이트
players[rank-2]=callP;
players[rank-1]=frontP;
}
return players;
}
}
rank는 1부터 시작하기 때문에 players에서 선수를 조회할 때는 -1이 디폴트이고
앞선수를 조회할 때 추가로 -1이 더 들어가기 때문에 -2가 나온다
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 혼자서 하는 틱택토 (0) | 2023.08.03 |
---|---|
[프로그래머스] 과제 진행하기 - 자바 (0) | 2023.07.28 |
[프로그래머스] 뒤에 있는 큰 수 찾기 (0) | 2023.07.28 |
[프로그래머스] 숫자 변환하기 - 자바 (0) | 2023.07.27 |
[프로그래머스] 괄호 변환 (0) | 2023.07.11 |