오늘의 문제 - 시뮬레이션
프로그래머스 - 달리기 경주
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
풀이
- 각 선수의 이름을 key로 하고, 그 선수의 등수(인덱스)를 값으로 하는 딕셔너리를 생성한다.
- 호출된 선수 처리
- callings 리스트에서 차례대로 선수를 읽어와서 그 선수의 현재 위치를 player_dict에서 찾는다.
- 찾은 위치를 기준으로 players 배열에서 해당 선수와 그 앞의 선수의 위치를 바꾼다.
- 바꾼 후, player_dict의 등수 값을 업데이트하여 각 선수의 등수를 갱신한다. - 최종 선수들의 순서가 저장된 players 배열을 반환한다.
회고
시뮬레이션
시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 문제 유형을 의미한다.
시뮬레이션과 완전탐색 모두 구현 문제의 유형으로 분류될 수 있는데 이 둘의 차이점은 아래와 같다.
- 시뮬레이션:
- 시뮬레이션은 시스템의 상태를 반복적으로 업데이트하며, 각 단계에서 시스템이 어떻게 변하는지를 계산한다.
- 규칙이나 모델에 따라 상태를 변화시키며, 현실적인 제약이나 조건을 반영한다.
- 예를 들어, 날씨 예측, 물리적 시스템의 동작, 경제 모델링 등이 시뮬레이션에 해당한다.
- 주어진 시스템의 동작을 모방하여 결과를 예측하거나 분석하는 데 사용된다. 복잡한 시스템을 모델링하여 시간이 흐름에 따라 상태가 어떻게 변하는지를 탐구한다.
- 완전 탐색:
- 완전 탐색은 모든 가능한 선택지나 경로를 일일이 확인하여 해를 찾는다.
- 주로 재귀나 반복문을 통해 가능한 모든 조합이나 순열을 생성하고, 각 경우를 검토한다.
- 예를 들어, N개의 숫자에서 K개의 조합을 찾거나, 모든 가능한 경로를 탐색하는 문제에서 완전 탐색을 사용한다.
- 가능한 모든 경우의 수를 하나하나 탐색하여 문제의 해를 찾는 방법이다. 최적해를 보장하지만 경우의 수가 많아질수록 비효율적일 수 있다.
'코테 스터디 99클럽' 카테고리의 다른 글
99클럽 코테 스터디 28일차 TIL + 스택/큐 (0) | 2024.08.19 |
---|---|
99클럽 코테 스터디 27일차 TIL + 시뮬레이션 (0) | 2024.08.18 |
99클럽 코테 스터디 25일차 TIL + 그래프(Graph) (0) | 2024.08.16 |
99클럽 광복절 이벤트 (0) | 2024.08.15 |
99클럽 코테 스터디 24일차 TIL + 그래프(Graph) (0) | 2024.08.15 |