코딩테스트를 위한 자료구조 알고리즘

구현

테오구 2021. 10. 25. 09:40
728x90

완전 탐색: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법

시뮬레이션: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행

 

파이썬에서 리스트 크기

파이썬에서의 고려 사항은 메모리의 제한이다. 대체로 테스트에서는 128~512MB로 메모리를 제한하는데 알고리즘 문제 중 수백만 개 이상의 데이터를 처리해야하는 문제가 출제되곤 한다.

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

구현 문제에 접근하는 방법

일반적으로 알고리즘 문제에서의 2차원 공간은 행렬의 의미로 사용됩니다.

1. 상하 좌우

# N 입력받기
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]
    # 공간을 벗어나는 경우 무시
    if nx < 1 or ny < 1 or nx > n or ny > n:
        continue
    # 이동 수행
    x, y = nx, ny

print(x, y)

2. 시각

# H를 입력받기
h = int(input())

count = 0
for i in range(h + 1):
    for j in range(60):
        for k in range(60):
            # 매 시각 안에 '3'이 포함되어 있다면 카운트 증가
            if '3' in str(i) + str(j) + str(k):
                count += 1

print(count)

3. 왕실의 나이트

# 현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
column = 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_column = column + step[1]
    # 해당 위치로 이동이 가능하다면 카운트 증가
    if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
        result += 1

print(result)

 

4. 문자열 재정렬

728x90

'코딩테스트를 위한 자료구조 알고리즘' 카테고리의 다른 글

삽입 정렬 알고리즘  (0) 2021.10.26
선택 정렬 알고리즘  (0) 2021.10.26
DFS & BFS  (0) 2021.10.25
그리디 알고리즘  (0) 2021.10.25
파이썬 문법  (0) 2021.10.25