내일배움캠프 AI/페어프로그래밍

[페어프로그래밍] 230425 캐릭터의 좌표 | if for max min int / abs dict

생각하는 코댕이 2023. 4. 25. 23:20
728x90

캐릭터의 좌표


페어프로그래밍 결과 코드

# 페어프로그래밍으로 제작한 코드

def solution(keyinput, board):
    [X,Y] = board #맵의크기
    [X,Y] = [int((X-1)/2),int((Y-1)/2)] #맵의허용범위크기
    [x,y] = [0,0] #처음좌표
    for i in keyinput: #입력방향에 따른 조작 구현
        if i == "up":
            [x,y] = [x,min(y+1,Y)] #맵의 범위를 넘지않도록
        elif i == "down":
            [x,y] = [x,max(y-1,-Y)]
        elif i == "left":
            [x,y] = [max(x-1,-X),y]
        elif i == "right":
            [x,y] = [min(x+1,X),y]
    answer = [x,y]
    return answer
더보기
# 테스트용 코드
import os
os.system("cls")

def solution(keyinput, board):
    [X,Y] = board #맵의크기
    [X,Y] = [int((X-1)/2),int((Y-1)/2)] #맵의허용범위크기
    [x,y] = [0,0] #처음좌표
    for i in keyinput: #입력방향에 따른 조작 구현
        if i == "up":
            [x,y] = [x,min(y+1,Y)] #맵의 범위를 넘지않도록
        elif i == "down":
            [x,y] = [x,max(y-1,-Y)]
        elif i == "left":
            [x,y] = [max(x-1,-X),y]
        elif i == "right":
            [x,y] = [min(x+1,X),y]
    answer = [x,y]
    return answer
############ 테스트케이스 ##############
keyinput1 = ["left", "right", "up", "right", "right"]
board1 = [11, 11]
# [2,1]
keyinput2 = ["down", "down", "down", "down", "down"]
board2 = [7, 9]
# [0, -4]
print("1번정답 [2,1] |",solution(keyinput1, board1))
print("2번정답 [0,-4] |",solution(keyinput2, board2))

흠터레스팅 코드

# 1번 | // 몫 연산자를 통해 연산 , dict를 통해 데이터를 저장 , abs를 통해 절대값으로 비교 
def solution(keyinput, board):
    x_lim,y_lim = board[0]//2,board[1]//2
    move = {'left':(-1,0),'right':(1,0),'up':(0,1),'down':(0,-1)}
    x,y = 0,0
    for k in keyinput:
        dx,dy = move[k]
        if abs(x+dx)>x_lim or abs(y+dy)>y_lim:
            continue
        else:
            x,y = x+dx,y+dy

    return [x,y]
# 2번 | // 몫 연산자를 통해 연산 , 삼항연산자 사용 , 변수재사용으로 변수정의를 최소화 한 부분이 인상적
def solution(keyinput, board):
    output = [0, 0]
    for key in keyinput:
        if key == 'left':
            output[0] = output[0] - 1 + (1 if -output[0] == board[0] // 2 else 0)
        elif key == 'right':
            output[0] = output[0] + 1 - (1 if output[0] == board[0] // 2 else 0)
        elif key == 'down':
            output[1] = output[1] - 1 + (1 if -output[1] == board[1] // 2 else 0)
        elif key == 'up':
            output[1] = output[1] + 1 - (1 if output[1] == board[1] // 2 else 0)
    return output

시사점 or 새로이 알게된 점

abs(<number>)
- 정의 | 내장함수
- 사용법 | abs(숫자입력)
- 결과 | 입력한 숫자의 절댓값으로 변환
- Type | 입력한 숫자의 type을 따라감
728x90