[이것이코딩테스트다] CHAPTER04 구현(1)

HO94·2021년 6월 14일
0

2021.06.14 정리

<1> 아이디어를 고르는 법

구현Implementation이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결방법
시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행

파이썬에서 리스트 크기

int 자료형 데이터의 개수에 따른 메모리 사용량

데이터의 개수(리스트의 길이)메모리 사용량
1,000약 4KB
1,000,000약 4MB
10,000,000약 40MB

크기가 1,000만 이상인 리스트가 있다면 메모리 용량 제한으로 문제를 풀 수 없게 되는 경우도 있음


<2> 왕실의 나이트

8 * 8 체스판에서 나이트 좌표가 주어졌을 때 이동할 수 있는 경우의 수

내가 작성한 코드

# 좌표 입력받기
data = input()

first_x = ord(data[0])
first_y = int(data[1])

x = list(range(1,9))
y = list(range(ord("a"), ord("h") + 1))


dx = [-2, -2, 2, 2, -1, 1, -1, 1]
dy = [-1, 1, -1, 1, -2, -2, 2, 2]
move = ['LU', 'LD', 'RU', 'RD', 'UL', 'UR', 'DL', 'DR']

count = 0
for i in range(len(dx)):
  nx = first_x + dx[i] 
  ny = first_y + dy[i]
  if 8 < ny or ny < 1 or max(x) < ny or ny < min(x):
    continue
  else:
    count += 1

print(count)

답안 예시

# 답안 예시 
# 현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
col = int(ord(input_data[0])) - int(ord("a")) + 1

# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]

# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
  # 이동하고자 하는 위치 확인
  next_row = row + step[0]
  next_col = col + step[1]
  # 해당 위치로 이동이 가능하다면 카운트 증가
  if next_row >= 1 and next_row <= 8 and next_col >= 1 and next_col <= 8:
    result += 1

print(result)

제한시간 20분인데 대충 50분정도 걸렸다,,,
하루에 한 챕터 끝내보려했는데 한 문제 푸는데 시간이 오래 걸려서 힘들듯하다.

0개의 댓글