[Algorithm] D-7 구현 (Implementation)

Jifrozen·2021년 7월 5일
1

Algorithm

목록 보기
13/70

구현 (Implementation)

  • 구현이란, 머리속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.

  • 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제

  • 코드가 길어지거나 문자열 실수연산을 처리해야하거나 적절한 라이브러리를 사용할시 빨리 풀 수 있는 문제이다.

문제

상하좌우

코드

n = int(input())

data = list(input().split())

dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
dr = ['R', 'U', 'L', 'D']

x, y = 0, 0

for i in data:
    for j in range(len(dr)):
        if i == dr[j]:
            if x + dx[j] >= 0 and x + dx[j] < 5 and y + dy[j] >= 0 and y + dy[j] < 5:
                x += dx[j]
                y += dy[j]

print(x + 1, y + 1)

시각

코드

n = int(input())
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):
                result += 1
print(result)

왕실의 나이트

n = input()
row = int(n[1])
column = int(ord(n[0])) - int(ord('a')) + 1
data = [(2, -1), (2, 1), (-2, 1), (-2, -1), (1, 2), (-1, 2), (1, -2), (-1, -2)]

nx, ny = 0, 0
result = 0
for i in data:
    nx = row + i[0]
    ny = column + i[1]
    if nx >= 1 and nx < 9 and ny >= 1 and ny < 9:
        result += 1

print(result)

풀이 과정

  1. 수평으로 두 칸 이동 수직 한 칸
  2. 수직 두 칸 수평 한 칸
    두가지 경우를 steps 보관
    아이디어는 생각이 났는데
    문자를 숫자로 바꾸는 파이썬 문법이 생각이 안났음

게임개발

구현은 문제가 너무 길다....
읽기도 벅차...^

코드

n, m = map(int, input().split())
a, b, d = map(int, input().split())

data = []
data1 = [[0] * m for i in range(n)]
for i in range(n):
    data.append(list(map(int, input().split())))
print(data1)
data1[a][b] = 1
# 북 동 남 서
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
result = 0


def turn(d):
    d -= 1
    if d < 0:
        d = 3
    return d


count = 1
while True:
    d = turn(d)

    if data[a + dx[d]][b + dy[d]] == 0 and data1[a + dx[d]][b + dy[d]] == 0:
        data1[a + dx[d]][b + dy[d]] = 1
        a = a + dx[d]
        b = b + dy[d]
        result += 1
        count = 1
    else:
        d = turn(d)
        count += 1
    if count == 3:
        if data[a - dx[d]][b - dy[d]] == 1:
            break
        data1[a - dx[d]][b - dy[d]] = 1
        a = a - dx[d]
        b = b - dy[d]
        result += 1
        count = 1
print(result)

풀이과정

  1. 현재 위치에서 방향을 기준으로 왼쪽 방향으로 돈다.

  2. 돌아서 안가봤으면 전진, 가봤으면 또 왼쪽으로 돈다.

  3. 네 방향 모두 가봤으면, 뒤로 한칸 가고 1번을 반복한다. 뒤가 바다면 끝낸다.

회전 아이디어

바다 육지 / 방문 경험을 따로 나눠서 배열 관리를 해야함
-> 왜? 네 방향 모두 가봐서 뒤로 한칸 갈때, 뒤가 바다이면 종료이지 한번 가 본 육지이면 종료가 아니기 때문이다.

씁....돌아가긴 하는데 예시가 하나여서 맞는지 모르겄움;;

4개의 댓글

comment-user-thumbnail
2021년 7월 5일

안녕하세요, 김덕우입니다! 구현은 문제가 너무 길어 읽기도 벅차다는 말에 100번 공감하고 갑니다....^__^ 혹시 게임 개발 문제는 아직 코드가 올라오지 않은 것일까요?!

1개의 답글
comment-user-thumbnail
2021년 7월 5일

안녕하세요! 😊입니다! 정말 구현은 문제가 길다는 말이 맞는 것 같아요,,,! 괜히 더 어려워 보이는 것 같아요,,!! 이번주 같이 힘내봐요!!!!

답글 달기
comment-user-thumbnail
2021년 7월 6일

오 그래도 알고리줌님은 게임개발 문제 성공하셨군요! 대단하십니다!
저도 분발해서 이번주 복습하면서 꼭 성공해보려구요
이번주도 힘내요

답글 달기