구현
빠른 설명
구현은 특별한 알고리즘보다 문제의 조건을 정확히 코드로 옮기는 유형이다. 실수는 대부분 인덱스, 범위, 조건 순서에서 나온다.
언제 쓰는가
- 시뮬레이션
- 격자 이동
- 날짜, 시간, 문자열 변환
- 조건이 많은 문제
핵심 습관
- 상태를 변수로 명확히 둔다.
- 방향 배열을 사용한다.
- 범위 체크 함수를 따로 생각한다.
- 예시를 손으로 한 번 따라간 뒤 코드로 옮긴다.
참고자료
C++ 코드
#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
int main() {
int n = 5;
int r = 2, c = 2;
string moves = "URDDL";
int dr[4] = {-1, 0, 1, 0};
int dc[4] = {0, 1, 0, -1};
string dir = "URDL";
for (char mv : moves) {
int k = dir.find(mv);
int nr = r + dr[k];
int nc = c + dc[k];
if (0 <= nr && nr < n && 0 <= nc && nc < n) {
r = nr;
c = nc;
}
}
cout << r << ' ' << c << '\n';
}Python 코드
n = 5
r, c = 2, 2
moves = "URDDL"
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
dirs = "URDL"
for mv in moves:
k = dirs.index(mv)
nr = r + dr[k]
nc = c + dc[k]
if 0 <= nr < n and 0 <= nc < n:
r, c = nr, nc
print(r, c)