프로그래머스 178871 달리기 경주 JAVA

sundays·2024년 3월 23일
0

문제

달리기 경주

풀이

해시 맵을 사용하는데 현재 부르는 참가자가 몇번째에 랭크되어있는지 확인하는 데 사용한다. String 배열로만 사용시 indexof로 사용하면 너무 늦기 때문에 해시맵을 사용하는 것이다.

HashMap<Stirng, Integer> hm = new HashNap<>();
for (int i = 0; i < players.length; i++) {
	hm.put(players[i], i);
}

그리고 현재 부른 참가자의 이전에 달리고 있는 사람의 정보가 필요한데, 이것은 players[현재참가자의 랭크 - 1] 을 하면 나오는 정보이다.

for (int i = 0 ; i < calling.length; i++) {
	// 불려진 참가자의 랭크
    int rank = hm.get(calling[i]);
    
    // 불려진 참가자 이전의 사람이 랭크가 뒤쳐짐
    hm.put(players[rank - 1], rank);
    players[rank] = players[rank - 1];
    
    // 불려진 참가자의 랭크를 한단계 상승
    hm.put(calling[i], rank - 1);
    players[rank - 1] = calling[i];
}

그리고 현재 불려진 참가자와의 랭크과 스왑을 하면 된다. 스왑을 할때 해시맵도 같이 수정을 해준다

문제만 차근차근 읽으면 풀 수 있을것이다. 제발제발

전체 코드

전체 코드

profile
develop life

0개의 댓글