구현(Implementation)
- 구현이란, 머릿속의 알고리즘을 소스코드로 바꾸는 과정.
- 일반적으로, 코딩테스트에서 구현 문제는, 풀이는 쉽지만 소스코드로 바꾸기는 까다로운 문제를 칭한다.
1. 시뮬레이션
- 시뮬레이션 - 일련의 명령에 따라서 개체를 차례로 이동시키는 문제. 단순 구현 문제이기 때문에 어떻게 구현할지의 아이디어를 소스코드화 하는 것이 중요하다.
내 답안.
N = int(input())
A_move = list(input().split())
A_x = 1
A_y = 1
for i in A_move:
if i == 'R':
if A_x == N:
pass
else:
A_x += 1
if i == 'U':
if A_y == 1:
pass
else:
A_y -= 1
if i == 'D':
if A_y ==N:
pass
else:
A_y += 1
if i == 'L':
if A_x == 1:
pass
else:
A_x -= 1
print(f'{A_y} {A_x}')
사실 이렇게 풀어도 정답이 나오지만, 세련되게 위에 주석처리한 2차원 배열을 선언해 풀어내도 된다.
모범답안
n = int(input())
x, y =1, 1
plans = input().split()
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)):
nx = x + dx[i]
ny = y + dy[i]
if nx <1 or ny < 1 or nx > n or ny > n:
continue
x, y = nx, ny
print(x, y)
2. 브루트포스(완전 탐색)
- 브루트포스는 완전탐색으로 모든 경우의 수를 전부 탐색한다. 파이썬은 초당 2천만번 이상의 연산을 수행할 수 있으므로, 시간복잡도에 의한 경우의 수를 잘 따져보고 사용해야 시간 초과가 나지 않는다.
N = int(input())
count_result = 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_result += 1
print(count_result)
오늘의 교훈? 너무 다차원적으로 생각하기보다
1.먼저 전부 무식하게 탐색이 되는가?
2.좌표나 이동하는 시뮬레이션 문제는 이동할 수 있는 행동자체를 리스트 등으로 할당해버리자!