• 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정
  • 사실 모든 문제가 구현이라고 할수있지만 구현에 초점이 맞추어져 있거나 구현이 어려운 문제를 주로 구현 유형이라고 한다!
  • 대표유형
    • 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제
    • 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제
    • 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제
    • 문자열을 특정 기준에 따라 끊어 처리해야 하는 문제
    • 적절한 라이브러리를 찾아서 사용해야 하는 문제
  • 일반적으로 알고리즘 문제에서 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()
# 동, 북, 서, 남
# dx = [0, -1, 0, 1]
# dy = [1, 0, -1, 0]

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:  # i.isalpha()로 검사해도 됨
        print(i, end='')
    else:
        total += int(i)
print(total)
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN