문제 설명
1차 시도
문제에 대해 직관적으로 접근하다 보니 이중 포문을 쓰게 되었다.
시간 복잡도가 마음에 걸렸는데 역시나 9번부터 시간 초과로 실패.
2차 시도
Arrays.asList(배열).indexOf("찾고자하는문자열");
을 사용하여 이중 포문에서 하나의 포문으로 줄어보았지만
그래도 9번부터 시간 초과 오류로 실패
3차 시도
이 이후로는 도저히 머리속에서 떠오르는 방법이 없었기에 구글링 시작...
블로그에서 HashMap을 사용하는 것에서 힌트를 얻었고 그 방식으로 3차 시도!
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
String[] answer = new String[players.length];
// HashMap 선언
HashMap<Integer, String> mapRank= new HashMap<>();
HashMap<String, Integer> mapPlayer = new HashMap<>();
// HashMap 초기화
for(int i=0; i<players.length; i++)
{
mapRank.put(i, players[i]);
mapPlayer.put(players[i], i);
}
for(int j=0; j<callings.length; j++)
{
// 추월한 사람의 등수
int currentRank = mapPlayer.get(callings[j]);
// 추월한 사람의 이름
String tempPerson = mapRank.get(currentRank);
// 추월 당한 사람의 이름
String frontPerson = mapRank.get(currentRank - 1);
// 순위 변경
mapRank.put(currentRank-1, tempPerson);
mapRank.put(currentRank, frontPerson);
mapPlayer.put(tempPerson, currentRank-1);
mapPlayer.put(frontPerson, currentRank);
}
for(int k=0; k<answer.length; k++)
{
answer[k] = mapRank.get(k);
}
return answer;
}
}
나는 HashMap을 두번 선언하여 사용하였지만
제출 후 다른 분들이 푼 방식을 보니 HashMap을 하나만 사용하는 것이 효율적일 것 같다.
HashMap 하나만 사용해서 다시 풀어봐야겠당
'Programmers' 카테고리의 다른 글
[Programmers : Java] - 공원산책 (4) | 2023.11.21 |
---|---|
[Programmers : Java] - 덧칠하기 (0) | 2023.11.05 |
[Programmers : Java] - 추억 점수 (0) | 2023.11.05 |