구현이란 "풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제"를 의미한다.
- 알고리즘은 간단하나 코드가 길어지는 경우
- 실수 연산 및 특정 소수점 까리 출력해야 하는 경우
- 문자열을 어떠한 기준에 따라 처리해야 하는 경우
- 적절한 라이브러리를 찾아서 사용해야 하는 경우
보통 문제에서 2차원 공간을 필요로 하는 경우에는 행렬의 의미로 사용되는 경우가 많다.
ex) 캐릭터 이동 문제

- 코드
for i in range(5):
for j in range(5):
print('(', i, ',', j, ')', end=' ')
print()
- 결과

- 예시
2차원 공간인 배열의 이동을 1차원 배열을 2개 생성하여 방향벡터로 이용하는 경우가 있다.
# 동, 북, 서, 남
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
direction = ['동', '북', '서', '남']
# 현재 위치
x, y = 2, 2
print(f'현재 위치: {x},{y}')
for i in range(4):
# 이동
nx = x + dx[i]
ny = y + dy[i]
print(nx, ny, direction[i])
- 결과

- 문제
상하좌우
2배원 배열에서 U,D,L.R에 따라 상하좌우로 이동한다. 시작 지점은 1,1 이고 가장 오른쪽 아래 끝 지점은 N,N이다.
입력 조건:
첫째 줄에 배열의 크기기 N이 주어지고(1<=N<=100), 둘째 줄에서는 이동할 문자들이 주어진다. (1 <=이동 횟수 <=100)
출력 조건: 첫째 줄에 최종적으로 도착할 지점의 좌표를 공백을 기준으로 구분하여 출력
- 코드
n = int(input())
moving = list(input().split())
direction = ['U', 'D', 'L', 'R']
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
x, y = 0, 0
for move in moving:
# 이동
for i in range(4):
if direction[i] == move:
nx = x + dx[i]
ny = y + dy[i]
break
# 범위 밖으로 나가는 경우는 그냥 넘어간다.
if nx <= -1 or ny <= -1 or nx >= n-1 or ny >= n-1:
continue
else:
x = nx
y = ny
print(x + 1, y + 1)
- 결과


'Algorithm' 카테고리의 다른 글
| [프로그래머스] 정수 제곱근 판별 (0) | 2025.03.07 |
|---|---|
| 백트래킹(Backtracking) (0) | 2021.05.06 |
| 그리디 알고리즘(탐욕법) (0) | 2021.04.27 |
| 유용한 표준 라이브러리 - itertools, heapq, bisect,collections, math (0) | 2021.04.27 |
| 람다 표현식 (0) | 2021.04.26 |