프로그래머스 - 달리기 경주

권권·2023년 5월 9일
0

Java 예제🛒

목록 보기
13/14
post-thumbnail

프로그래머스 - 달리기 경주 문제
https://school.programmers.co.kr/learn/courses/30/lessons/178871
Map 을 구현하고 버블정렬을 통하여 두 Map을 비교하고 그것을 배열에 적용하는 문제

접근방법
1. 우선 Map을 생성하고 <이름, 등수> 로 대입
2. Map의 value를 변경하고 그 value 를 기존 배열에 대입하여 바꿔주는 과정을 거침

코드

import java.util.*;
class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        // HashMap으로 진행하려 함
        Map<String, Integer> map = new HashMap<>();
        
        for(int i = 0 ; i < players.length ; i++){
            map.put(players[i], i);
        }
        
        for(int k = 0 ; k < callings.length ; k++){
            // 이름이 불렸을 때
            // 이름 불린 사람의 key 값 (등수) 를 저장
            int idx = map.get(callings[k]);
            
            // 등수를 바꿔주기 전, 앞의 인원의 이름 임시 저장
            String playerName = players[idx - 1];
            
            // 앞의 등수와 이름 변경
            players[idx - 1] = players[idx];
            
            // index에 저장한 등수 는 이전 앞의 등수 사람으로 변경
             players[idx] = playerName;
            
            // Map 에 해당 정보 저장
            map.put(players[idx], idx);
            map.put(players[idx-1], idx-1);
        }

        return players;
    }
}

Map 을 사용하는 생각까지 도달, 그러나 index 변수를 추가하고 Map의 정보를 기준으로 위치를 바꾸는 것을 구현하지 못하였다.

이 문제 처럼 서로 인접한 두 원소의 대소를 비교하고 조건에 따라 자리를 교환하며 정렬하는 알고리즘을 버블 정렬이라고 한다고 한다.

버블정렬 참고 :
https://gyoogle.dev/blog/algorithm/Bubble%20Sort.html

profile
안녕하세요

0개의 댓글