본문 바로가기
코테 스터디 99클럽

99클럽 코테 스터디 26일차 TIL + 시뮬레이션

by leelisa 2024. 8. 17.

오늘의 문제 - 시뮬레이션

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

https://school.programmers.co.kr/learn/courses/30/lessons/178871


내 풀이 및 접근 방식

선수명과 선수 등수를 사전에 저장해놓고, 해설진이 부를 때마다 사전 값을 변경해주는 방식으로 접근했다.

import sys

def solution(players, callings):

    players_dict = {player: index for index, player in enumerate(players)}

    for player in callings:

        # player_index = answer.index(player)
        player_index = players_dict[player]
        
        players[player_index], players[player_index-1] = players[player_index-1], players[player_index]

        players_dict[player] -= 1
        players_dict[players[player_index]] += 1

    return players

 

풀이

  1. 각 선수의 이름을 key로 하고, 그 선수의 등수(인덱스)를 값으로 하는 딕셔너리를 생성한다.
  2. 호출된 선수 처리
    - callings 리스트에서 차례대로 선수를 읽어와서 그 선수의 현재 위치를 player_dict에서 찾는다.
    - 찾은 위치를 기준으로 players 배열에서 해당 선수와 그 앞의 선수의 위치를 바꾼다.
    - 바꾼 후, player_dict의 등수 값을 업데이트하여 각 선수의 등수를 갱신한다.
  3. 최종 선수들의 순서가 저장된 players 배열을 반환한다.

회고

시뮬레이션

시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 문제 유형을 의미한다.

 

시뮬레이션과 완전탐색 모두 구현 문제의 유형으로 분류될 수 있는데 이 둘의 차이점은 아래와 같다.

 

  • 시뮬레이션:
    • 시뮬레이션은 시스템의 상태를 반복적으로 업데이트하며, 각 단계에서 시스템이 어떻게 변하는지를 계산한다.
    • 규칙이나 모델에 따라 상태를 변화시키며, 현실적인 제약이나 조건을 반영한다.
    • 예를 들어, 날씨 예측, 물리적 시스템의 동작, 경제 모델링 등이 시뮬레이션에 해당한다.
    • 주어진 시스템의 동작을 모방하여 결과를 예측하거나 분석하는 데 사용된다. 복잡한 시스템을 모델링하여 시간이 흐름에 따라 상태가 어떻게 변하는지를 탐구한다.
  • 완전 탐색:
    • 완전 탐색은 모든 가능한 선택지나 경로를 일일이 확인하여 해를 찾는다.
    • 주로 재귀나 반복문을 통해 가능한 모든 조합이나 순열을 생성하고, 각 경우를 검토한다.
    • 예를 들어, N개의 숫자에서 K개의 조합을 찾거나, 모든 가능한 경로를 탐색하는 문제에서 완전 탐색을 사용한다.
    • 가능한 모든 경우의 수를 하나하나 탐색하여 문제의 해를 찾는 방법이다. 최적해를 보장하지만 경우의 수가 많아질수록 비효율적일 수 있다.