구현

겨울조아·2022년 12월 22일
0

구현 = 머릿 속 알고리즘을 소스코드로 바꾸는 과정

풀이는 쉬운데 소스코드로 옮기기 어려운 문제

ex)코드가 너무 길어지거나, 실수인데 특정 소수점, 문자열을 특정 기준에 맞춰 끊어야하거나, 적절한 라이브러리 찾아서 사용해야 할 때

행렬

동,북,서,남 or 오,위,왼,아래

dx = [0,-1,0,1] #행이 바뀜, 왼축이 x
dy = [1,0,-1,0] #열

현재 위치

x,y = 2,2

for i in range(4):
  #다음 위치
  nx = x + dx[i]
  ny = y + dy[i]
  print(nx,ny)

문제 1. 상하좌우

비슷한 유형 : 프로그래머스 lv.0 캐릭터의 좌표

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]
  #파이썬은 nx 초기화 따로 필요 없이
  if nx < 1 or ny < 1 or nx > n or ny > n:
    continue #아래 코드를 실행하지 않고 건너뜀
  x, y = nx, ny #위치가 for로 굴러가야함
  print(x,y)

문제 2. 시각 - 완전탐색 괜찮음

n = int(input())
count = 0
for i in range(n+1):
  for j in range(60):
    for k in range(60):
      if '3' in str(i) + str(j) + str(k):
        count += 1
print(count)

문제 3. 왕실의 나이트

방법1 - 문제1처럼 dx와 dy를 따로 다루기

data = input()

result = 0
dx = [2,2,-2,-2,1,-1,1,-1]
dy = [1,-1,1,-1,2,2,-2,-2]

for i in range(len(dx)):
  nx = int(ord(data[0])) - int(ord('a')) + 1 + dx[i] //아스키코드 ord
  ny = int(data[1]) + dy[i]

  if nx >= 1 and ny >= 1 and nx <= 8 and ny <= 8:
    result += 1

print(result)

방법2 - 리스트로 한번에 처리하기

data = input()
row = int(data[1])
column = int(ord(data[0])) - int(ord('a')) + 1

steps = [(-2,-1),(-1,-2),(1,2),(2,1),(-2,1),(-1,2),(1,-2),(2,-1)]

result = 0
for step in steps:
  next_row = row + step[0]
  next_column = column + step[1]

  if next_row >= 1 and next_column >= 1 and next_row <= 8 and next_column <= 8:
    result += 1

print(result)

문제 4. 문자열 재정렬

data = input()
result = []
value = 0

for x in data:
  if x.isalpha():
    result.append(x)
  else:
    value += int(x)

result.sort()

if value != 0:
  result.append(str(value))

print(''.join(result))

0개의 댓글