본문 바로가기

코딩테스트/프로그래머스

[C] 코딩 기초 트레이닝 (101 ~ 124)

📂 유형 1: 2차원 배열과 방향 벡터 (Direction Vector)

'정수를 나선형으로 배치하기', '이차원 배열 대각선 순회' 등 공간을 제어하는 문제입니다. 수학적 계산보다는 시뮬레이션 방식이 요구됩니다.

💡 핵심 복기 포인트

  • 방향 벡터(dr, dc) 도입: 복잡한 다중 for문 대신, 상하좌우 이동을 배열로 정의하여 코드를 간결하게 만드는 상태 머신(State Machine) 기법.
  • 엄격한 경계 검사(Boundary Check): nr < 0 || nr >= n과 같이 메모리 영역을 벗어나는지 확인하는 로직. 이는 시스템 해킹의 주원인인 Out-of-bounds 취약점을 방어하는 시큐어 코딩의 기본입니다.
  • 이중 포인터(**) 동적 할당: 포인터의 배열을 malloc으로 만들고, 각 행에 다시 메모리를 할당하는 2차원 메모리 구조의 이해.

📂 유형 2: 자료형의 한계 극복 (Big Integer Math)

'두 수의 합'과 같이 일반적인 int나 long long 범위를 아득히 초과하는 초대형 숫자를 다루는 문제입니다.

💡 핵심 복기 포인트

  • 정수 오버플로우(Integer Overflow) 회피: 하드웨어 자료형의 한계를 인지하고, 배열이나 문자열을 이용해 소프트웨어적으로 연산을 구현하는 방법.
  • 문자열 기반 산술 연산: 일의 자리부터 역순으로 더해가며 올림수(Carry)를 처리하는 알고리즘. 암호학에서 수백 자리의 소수(Prime)를 다루는 라이브러리(BIGNUM)들이 기본적으로 사용하는 방식입니다.

📂 유형 3: 해시(Hash) 기법과 유한 상태 머신 (FSM)

'주사위 게임 3', '코드 처리하기' 등 수많은 다중 조건이나 순서를 처리해야 하는 문제입니다.

💡 핵심 복기 포인트

  • Direct-Address Table (빈도수 배열): 조건문을 수십 개 늘어놓는 대신, 숫자의 등장 횟수를 인덱스로 카운트하여 O(N)의 시간 복잡도로 패턴을 찾아내는 최적화 기법.
  • 상태 전이(State Transition): 변수(mode 등)에 따라 프로그램의 동작 방식이 스위칭되는 구조. 네트워크 패킷 파서나 악성코드 탐지 로직의 근간이 되는 설계입니다.

📂 유형 4: 투 포인터(Two Pointer)와 메모리 최적화

'배열 조각하기', '문자열 여러 번 뒤집기' 등 범위 연산을 효율적으로 처리하는 문제입니다.

💡 핵심 복기 포인트

  • 가상 슬라이싱 (In-place operation): 매번 새로운 배열을 할당하지 않고, 시작점(bottom)과 끝점(top) 인덱스만 조작하여 메모리 부하를 극한으로 줄이는 기법.
  • realloc의 정교한 활용: 배열의 크기가 동적으로 변할 때, 널 문자(\0)를 위한 1바이트 오프셋(Off-by-one)을 고려하여 메모리를 안전하게 자르고 확장하는 기술.