프로그래머스 달리기 경주 JAVA 풀이 (해시맵, 시뮬레이션)

2026. 5. 7. 15:17·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

프로그래머스 달리기 경주


📌 문제 개요

선수들의 현재 순위가 players 배열로 주어진다.

callings 배열에 특정 선수 이름이 호출되면 해당 선수는 바로 앞 선수와 자리를 교체한다.

 

모든 호출이 끝난 뒤 최종 선수 순서를 반환하는 문제이다.


📌 접근 방법

처음에는 호출된 선수를 찾기 위해
매번 players 배열 전체를 탐색할 수 있다.

 

하지만 이 방식은:

O(N × M)
 

시간복잡도가 발생하여 효율성 문제가 생긴다. (시간초과로 인한 테스트 실패 가능성 있음)

  • 배열 → 실제 순위 저장
  • HashMap → 선수 현재 위치 저장

구조로 분리해서 해결했다.


📌 핵심 아이디어

1. 선수 이름 → 현재 위치 저장

Map<String, Integer>
 

호출된 선수의 현재 위치를 O(1)에 조회 가능하다.

 

2. swap 후 Map도 함께 갱신

 

배열만 변경하면 안 되고
현재 위치 정보도 수정해야 한다.

rankMap.put(calling, currentRank - 1);
rankMap.put(frontPlayer, currentRank);
 

📌 전체 코드

import java.util.HashMap;
import java.util.Map;

class Solution {
    public String[] solution(String[] players, String[] callings) {

        Map<String, Integer> rankMap = new HashMap<>();

        for (int i = 0; i < players.length; i++) {
            rankMap.put(players[i], i);
        }

        for (String calling : callings) {

            int currentRank = rankMap.get(calling);

            String frontPlayer = players[currentRank - 1];

            players[currentRank - 1] = calling;
            players[currentRank] = frontPlayer;

            rankMap.put(calling, currentRank - 1);
            rankMap.put(frontPlayer, currentRank);
        }

        return players;
    }
}

📄 정리

  • 배열만 탐색하면 효율성 문제 발생
  • 현재 위치를 빠르게 찾기 위해 HashMap 사용
  • 배열 + HashMap 조합은 순위 변경 문제의 대표 패턴
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 약수의 개수와 덧셈 (JAVA)  (0) 2026.05.12
프로그래머스 제일 작은 수 제거하기 JAVA 풀이 (알고리즘, 시간복잡도)  (0) 2026.05.10
프로그래머스 나누어 떨어지는 숫자 배열 JAVA 풀이 (정렬, Stream)  (0) 2026.05.06
프로그래머스 순위 JAVA 풀이 (그래프, 플로이드워셜, 순위판별)  (0) 2026.05.05
프로그래머스 단어 퍼즐 JAVA 풀이 (DP, 시간복잡도)  (0) 2026.05.05
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 약수의 개수와 덧셈 (JAVA)
  • 프로그래머스 제일 작은 수 제거하기 JAVA 풀이 (알고리즘, 시간복잡도)
  • 프로그래머스 나누어 떨어지는 숫자 배열 JAVA 풀이 (정렬, Stream)
  • 프로그래머스 순위 JAVA 풀이 (그래프, 플로이드워셜, 순위판별)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    level1
    Level2
    구현
    solved.ac
    정보처리기사 실기 기출문제
    문자열
    정처기
    프로그래머스
    실기
    브루트포스
    정렬
    dp
    백준
    java
    기출문제
    백엔드개발자
    정보처리기사
    level0
    피보나치
    정처기오답노트
    완전탐색
    시뮬레이션
    자료구조
    배열
    자바
    코딩테스트
    springboot
    알고리즘
    수학
    정처기실기
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 달리기 경주 JAVA 풀이 (해시맵, 시뮬레이션)
상단으로

티스토리툴바