시뮬레이션
by yuyeol3, 2025-10-04
계산식 등을 이용하는 효율적인 방법을 항상 생각해내기는 어렵다. 그런 경우, 시뮬레이션을 통해 실제 세계에서 작동하는 방식을 모방하여 계산해 보면 해를 쉽게 얻을 수 있다.
1. 날짜/시간 계산
- 계산식
- 시계 구현
h = 0 m = 0 elapsed = 0 while not (h == h2 and m == m2): m += 1 elapsed += 1 if (m == 60): m = 0 h += 1
- 날짜 -> 월별 날짜를 달력으로
2. 구간 칠하기
- 점, 블록
- 선분, 시간범위, 구간 -> 인덱스 주의하기 ==지점의 개수가 구간의 개수보다 항상 하나 많기 때문==
|-|-|-|-|-| // 지점 : 6, 구간: 5
3. 사각형 칠하기
2차원 사각형 -> 구간
- 문제에 따라 점으로 표현되는 경우도 (격자)
그림 보고 알아서 파악하기
4. dx, dy 테크닉
어떤 격자에서 동, 서, 남, 북으로 이동할 때
dx = {1, 0, -1, 0};
dy = {0, -1, 0, 1};
x += dx[dir_num];
y += dy[dir_num];
로 단순화할 수 있다.
특히 이동 방향이 많아지면 더 유리 (x 이동방향부터 먼저 만들기)
- 방향 회전을 요구하는 경우
- 회전 방향에 맞게 dx, dy를 설계
- 동서남북 -> 순서에 맞게 설계
dx = {0, 1, 0, -1}; dy = {1, 0, -1, 0}; dir = (dir + 1) % 4 // 우회전 dir = (dir + 4 - 1) % 4 // 좌회전 dir = (dir + 2) // 뒤돌기
5. 격자에서의 dx, dy
- ==배열 범위 확인 필요==
if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
- 함수로 빼는 것 추천
dx = {1, 0, -1, 0}; dy = {0, 1, 0, -1};
댓글 불러오는 중...