- 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
- 사실 모든 문제가 구현이라고 할수있지만 구현에 초점이 맞추어져 있거나 구현이 어려운 문제를 주로 구현 유형이라고 한다!
- 대표유형
- 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제
- 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제
- 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제
- 문자열을 특정 기준에 따라 끊어 처리해야 하는 문제
- 적절한 라이브러리를 찾아서 사용해야 하는 문제
- 일반적으로 알고리즘 문제에서 2차원 공간은 행렬의 의미로 사용됨
- 시뮬레이션 및 완전탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용됨
dx = [0, -1, 0, 1]
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)
문제 : 상하좌우
나의 풀이
n = int(input())
arr = input().split()
di = {'R': (0, 1), 'U': (-1, 0), 'L': (0, -1), 'D': (1, 0)}
x, y = 1, 1
for d in arr:
dx = di[d][0]
dy = di[d][1]
nx = x + dx
ny = y + dy
if 1 <= nx <= n and 1 <= ny <= n:
x = nx
y = ny
print(x, y)
문제 : 시각
- 하루는 86400초이므로 00시00분00초 ~ 23시 59분 59초까지 모든 경우의 수는 86400이다. 따라서 완전탐색(Brute Force)로 풀 수 있다.
- 완전탐색 : 가능한 모든 경우의 수를 탐색해보는 방법
n = int(input())
cnt = 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):
cnt += 1
print(cnt)
문제 : 왕실의 나이트
n = input()
x = ord(n[0])-96
y = int(n[1])
cnt = 0
di = [(1, -2), (2, -1), (2, 1), (1, 2), (-1, -2), (-2, -1), (-2, 1), (-1, 2)]
for d in di:
nx = x+d[0]
ny = y+d[1]
if 1 <= nx <= 8 and 1 <= ny <= 8:
cnt += 1
print(cnt)
문제 : 문자열 재정렬
나의 풀이
n = list(input())
n.sort()
total = 0
for i in n:
if 65 <= ord(i) <= 90:
print(i, end='')
else:
total += int(i)
print(total)