구현

빠른 설명

구현은 특별한 알고리즘보다 문제의 조건을 정확히 코드로 옮기는 유형이다. 실수는 대부분 인덱스, 범위, 조건 순서에서 나온다.

언제 쓰는가

  • 시뮬레이션
  • 격자 이동
  • 날짜, 시간, 문자열 변환
  • 조건이 많은 문제

핵심 습관

  • 상태를 변수로 명확히 둔다.
  • 방향 배열을 사용한다.
  • 범위 체크 함수를 따로 생각한다.
  • 예시를 손으로 한 번 따라간 뒤 코드로 옮긴다.

참고자료

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)