포시코딩

[프로그래머스][Lv.0] 캐릭터의 좌표 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.0] 캐릭터의 좌표

포시 2022. 12. 14. 21:42
728x90

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

def solution(keyinput, board):
  character_x = 0
  character_y = 0
  max_right = (board[0]-1)/2
  max_left = -(board[0]-1)/2
  max_up = (board[1]-1)/2
  max_down = -(board[1]-1)/2
  
  for e in keyinput:
      if e == 'right' and character_x < max_right:
          character_x += 1
      elif e == 'left' and character_x > max_left:
          character_x -= 1
      elif e == 'up' and character_y < max_up:
          character_y += 1
      elif e == 'down' and character_y > max_down:
          character_y -= 1
  
  return [character_x, character_y]

쓰고 나서도 내내 너무 노가다로 풀었단 생각이 들어 다른 사람의 풀이를 봤다.

 

다른 사람 풀이

def solution2(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]

커맨드에 대해 딕셔너리 형태로 나타낸 것과 

x, y의 리미트에 대해서 나머지를 버리는 //를 활용한 부분

x, y = a, b와 같이 콤마(,)를 활용한 코드 압축 등

배우고 써먹을 부분이 많아 이렇게 따로 메모해둔다.

 

시간복잡도

두 풀이 모두 시간복잡도는 O(N)이다.

728x90