본문 바로가기

코테 공부/python

Python 캐릭터의 좌표

https://school.programmers.co.kr/learn/courses/30/lessons/120861

나는 분화 짱 잘해

처음엔 심지어 끝에 부딪쳣다가 다시 줄어들 경우를 고려하지 못하고 맨 마지막에만 카운트를 해서 잘못 알고리즘을 짰다

def solution(keyinput, board):
    answer = [0, 0]

    for keyin in keyinput:
        if keyin == 'up':
            answer[1] += 1
            if answer[1] > board[1] // 2:
                answer[1] = board[1] // 2
        elif keyin == 'down':
            answer[1] -= 1
            if -answer[1] > board[1] // 2:
                answer[1] = -(board[1] // 2)
        elif keyin == 'right':
            answer[0] += 1
            if answer[0] > board[0] // 2:
                answer[0] = board[0] // 2
        else:
            answer[0] -= 1
            if -answer[0] > board[0] // 2:
                answer[0] = -(board[0] // 2)


    return answer

 

역시 다른 사람 풀이 보니 일단 딕셔너리 이용했고

저렇게 dx, dy로 변화량 따로 받아서 if문으로 더한 값을 가정 먼저 해서 본래 값에 변화 없이 if문에 걸리면 다음 for문 돌아가도록 만들어두었다.

처음엔 왜 or 로 가능한거지 했다가 이게 한번에 들어오는 dx dy 가 결국 한쪽만 이동하는 게 들어오니까..

햐..

def solution(keyinput, board):
    limitX, limitY = board[0]//2, board[1]//2
    dict = {'up':(0, 1), 'down':(0, -1), 'right':(1, 0), 'left':(-1, 0)}
    x, y = 0, 0
    
    for key in keyinput:
        dx, dy = dict[key]
        if abs(x + dx) > limitX or abs(y + dy) > limitY:
            continue
        else:
            x += dx
            y += dy
            
    return [x, y]

'코테 공부 > python' 카테고리의 다른 글

Python f-string , 정렬  (0) 2023.06.05
[백준] Python 코테 스터디 -수들의 합 (그리디)  (0) 2023.06.05
Python 직사각형 넓이 구하기  (0) 2023.06.04
Python 문자열 밀기  (1) 2023.06.02
Python .find() .index()  (0) 2023.06.02