데이터 코딩랩

시뮬레이션 알고리즘 잘 푸는법 7가지 본문

Algorithm/이론

시뮬레이션 알고리즘 잘 푸는법 7가지

researcher 틴틴 2025. 4. 18. 17:40

1️⃣ **상태(State)**를 명확히 정리해라

💡문제에서 변하는 값은 무엇인가?

- 로봇 청소기 : 위치, 방향, 청소 여부

- 구슬 탈출 : 빨간 구슬 위치, 파란 구슬 위치

- 시계 시뮬레이션 : 시각(초,분), 타이머 위치

 

→ 상태는 반드시 변수로 추적되어야 해!

 

2️⃣ 입력 & 초기화 깔끔하게 하기

 

- 입력받는 자료구조는 list, 2차원 배열, dict 중 어떤게 좋은가?

- 초기 위치/값/방향을 확실히 변수에 저장!

 

x, y = 시작점
direction = 0  # 0: 북, 1: 동, ...

board = []
for _ in range(N):
    row = list(map(int, input().split()))
    board.append(row)

 

 

 

3️⃣ 조건을 종이에 써서 시나리오화 해라

문제 설명을 코드 순서로 재배치하자

 

예) 로봇 청소기
1. 현재 칸이 0이면 청소
2. 왼쪽부터 차례로 탐색
3. 네 방향 다 안되면 후진
→ 이걸 if / else / 반복문 구조로 짜야 함

 

✨ 그림 그리면서 칸 하나씩 가보는 게 정말 도움됨

 

 

4️⃣ 방향을 벡터로 정리해두면 편하다

dx = [-1, 0, 1, 0]  # 북동남서
dy = [0, 1, 0, -1]

→ 방향 전환: (d + 3) % 4, (d + 1) % 4 이런 식으로 간단히

 

 

5️⃣ while문으로 루프 돌리기 + 종료 조건 명확히

 

  • 보통 while True: + if break 조건: 패턴이 많음
  • 또는 큐를 사용해서 넣고 빼며 진행
while True:
    if 청소 못 하고 후진도 불가능:
        break

 

 

6️⃣ 중간에 상태 추적용 print 적극 활용하기

 

실전 디버깅 팁:

print(f"Step {step}: 위치=({x},{y}), 방향={d}")

→ 어디서 꼬였는지 바로 확인 가능!

 

7️⃣ 예제 입력 그대로 따라가 보기

 

 

 

 

✅ 정리: 시뮬레이션 풀이 루틴