데이터 코딩랩
시뮬레이션 알고리즘 잘 푸는법 7가지 본문
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️⃣ 예제 입력 그대로 따라가 보기
✅ 정리: 시뮬레이션 풀이 루틴
'Algorithm > 이론' 카테고리의 다른 글
시뮬레이션 이론 정리 (0) | 2025.04.18 |
---|---|
그리디 알고리즘 개념 정리하기 (0) | 2025.04.17 |
input().strip().split() (0) | 2025.04.17 |
list.sort() 와 sorted(list) (0) | 2025.04.17 |
정렬 알고리즘 요약정리 2 sorted(), .sort(), reverse=True, key=lambda (0) | 2025.04.16 |