구현 알고리즘 1 : 구현 문제에 접근하는 방법

화승이·2023년 3월 27일
0
  • 맞다. 저번에 말한 것처럼 오늘 다룰 알고리즘은 '구현' 알고리즘이다. 말 그대로 구현하는 문제이기에 왜 배우나 싶을 수 있는데, 이런 구현의 문제는 요즘 코딩테스트의 추세를 보면, 사소한 입력 조건 등부터 시작해서 문제의 길이가 꽤 길게 나와 조건을 많이 명시해주면서 준다. 즉, 기본적인 문법 + 프로그램 모듈에 대한 이해도 + 더 나아가 웹 서버나 데이터 분석에 대한 기초 지식도 알고 있으면, 쉽게 풀 수 있을 것이다. 앞서 했던, 그리디 유형과 지금부터 할 구현 알고리즘은 코딩테스트에서 쉽게 풀 수 있도록 나오는 1,2 문제에 해당하기 때문에 다 맞출 수 있도록 공부하자!! 그럼 시작해보겠다.

1. 상하좌우

  1. 문제설명
    여행가 A는 N X N 크기의 정사각형의 공간에 있다. 가장 왼쪽 위 좌표는 (1,1) 인데, L,R,U,D 로 왼쪽이나, 오른쪽, 위 그리고 아래로 한 칸씩 이동할 수 있다. 단, 정사각형의 공간을 벗어나는 움직임은 무시된다. 사용자로부터 이동할 계획서를 주어지면, 최종적으로 도착할 좌표를 구하면 된다.
  • 입력조건

    • 첫 째 줄에 공간의 크기를 나타내는 N이 주어진다. (1 <= N <= 100)
    • 둘 째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1 <= 이동 횟수 <= 100)
  • 출력조건

    • 첫째 줄에 A가 최종적으로 도착할 지점의 좌표 (X,Y)를 공백으로 구분하여 출력한다.
  1. 문제 풀이
    위 문제를 푸는 방법은 간단하다. N을 입력받고, L,R,U,D를 입력받을 리스트를 하나 만든다. 물론, 리스트를 제작할 때 X,Y 방향으로 이동할 수 있게 한 쌍으로 받을 수 있도록 한다. (뒤에 코드를 보면 쉽게 이해할 수 있다.) 그 이후, 이동 계획을 하나씩 읽으며, 가능한 움직임일시 이동을 하고, 이동할 수 없는 조건이 생긴다면 continue를 활용해 반복문이 끝날 때까지 반복할 수 있도록 한다.
    #다음 문제는 연산 횟수와 이동 횟수가 비례하기에, 시간 복잡도를 보자면 O(N)으로 나타낼 수 있다.

n = int(input())
x, y = 1, 1
plans = input().split()

dx = [0, 0 , -1, 1]
dy = [-1, 1, 0, 0 ]
move_types = ['L', 'R', 'U', 'D']

for plan in plans:
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]

if nx < 1 or ny < 1 or nx > n or ny > n:
        continue
    
x, y = nx, ny

print(x,y)


profile
이제부터 하고싶은것만 하면서 살거야

0개의 댓글