For Programmer

2. 구현(Implementation) 이론 본문

코팅테스트/코딩테스트 이론 정리

2. 구현(Implementation) 이론

유지광이 2021. 8. 12. 17:38
728x90

코딩테스트에서 구현이란?

-> dx= [0,-1,0,1] dy=[1,0,-1,0] -> x는 행  , y는 열로 보면된다. 동쪽으로 갈때는 (0,1) 이 되는데, 행은 이동하지않고 열만 오른쪽으로 한칸 이동해야하기 때문에 (0,1)이 나온다. 북쪽은 (-1,0) 이 되는데, 행을 오른쪽 한칸 올리고 열을 가만히 냅두면 된다.

 

구현 대표적 문제1

나의 코드

n = int(input())
data = list(map(str,input().split()))

nx = 1
ny = 1

dx = [0,-1,0,1] #동,북,서,남 #R U L D
dy = [1,0,-1,0] #동,북,서,남 #R U L D

for i in range(len(data)):
    if(data[i] == "R"): #  data[i] 가 "R" 이라면
        nx += dx[0]
        ny += dy[0]
        if ny == 0 or ny == n+1: # 단,ny가 0이거나 n의크기보다 커지면
            ny -= 1 #다시 더했던 것을 빼준다.
    elif (data[i] == "U"):
        nx += dx[1]
        ny += dy[1]
        if nx == 0 or nx == n+1:
            nx += 1
    elif (data[i] == "L"):
        nx += dx[2]
        ny += dy[2]
        if ny == 0 or ny == n + 1:
            ny += 1
    elif (data[i] == "D"):
        nx += dx[3]
        ny += dy[3]
        if nx == 0 or nx == n + 1:
            nx -= 1

print(nx,ny)

정답 코드

#N 입력받기
n = int(input())
x,y = 1,1 #시작점 좌표
plans = input().split()

# L, R, U, D 에 따른 이동방향
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 nx > n or ny < 1 or ny > n:
        continue
    #이동 수행
    x, y = nx, ny

print(x,y)
728x90
Comments