구현이란 "풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제"를 의미한다.

  • 알고리즘은 간단하나 코드가 길어지는 경우
  • 실수 연산 및 특정 소수점 까리 출력해야 하는 경우
  • 문자열을 어떠한 기준에 따라 처리해야 하는 경우
  • 적절한 라이브러리를 찾아서 사용해야 하는 경우

보통 문제에서 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)

 

- 결과

 

 

+ Recent posts