본문 바로가기
Programming Test/코테 대비 과정

[알고리즘 공부] 게임 개발

by muns91 2024. 3. 24.
게임 개발

 

유형 : 구현

출처 : 이것이 취업을 위한 코딩 테스트다. with Python

프로그램 언어 : Python

난이도 : ★

 

 

규칙

  • 첫째 줄에 맴의 세로 크기 N과 가로 크기 M을 공백으로 구분하여 입력한다. (3<=N, M<=50)
  • 둘째 줄에 게임 캐릭터가 있는 칸의 좌표(A, B)와 바라보는 방향 d가 각각 서로 공백으로 구분하여 주어진다. 방향 d의 값으로는 다음과 같이 4가지가 존재한다.
    • 0: 북쪽
    • 1: 동쪽
    • 2: 남쪽
    • 4: 서쪽
  • 셋째 줄에 맵이 육지인지 바다인지에 대한 정보가 주어진다. N개의 줄에 맵의 상태가 북쪽부터 남쪽 순서대로, 각 줄의 데이터는 서쪽부터 동쪽 순서대로 주어진다. 맵의 외각은 항상 바다로 되어 있다. 
    • 0: 육지
    • 1: 바다
  • 처음에 게임 캐릭터가 위치한 칸의 상태는 항상 육지이다. 
  • 출력 조건 : 첫째 줄에 이동을 마친 후 캐릭터가 방문한 칸의 수를 출력한다.
입력 예시
4 4
1 1 0
1 1 1 1 
1 0 0 1
1 1 0 1
1 1 1 1

출력 예시
3

 

 

# 입력 받기: 맵의 크기 (n, m), 캐릭터의 초기 위치와 바라보는 방향 (x, y, direction)
n, m = map(int, input().split())
# 방문한 위치를 저장할 맵 초기화
d = [[0]* m for _ in range(n)]
x, y, direction = map(int, input().split())
d[x][y] = 1  # 시작 위치 방문 처리

# 전체 맵 정보 입력 받기
array = []
for i in range(n):
    array.append(list(map(int, input().split())))

# 북, 동, 남, 서 방향 정의
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

# 왼쪽으로 회전하는 함수
def turn_left():
    global direction
    direction -= 1
    if direction == -1:
        direction = 3

# 시작 시 방문한 칸의 수는 1
count = 1
# 회전한 횟수
turn_time = 0

# 메인 로직 시작
while True:
    turn_left()  # 일단 왼쪽으로 회전
    nx = x + dx[direction]  # 이동할 x 좌표
    ny = y + dy[direction]  # 이동할 y 좌표

    # 회전한 이후 정면에 가보지 않은 칸이 존재하는 경우 이동
    if d[nx][ny] == 0 and array[nx][ny] == 0:
        d[nx][ny] = 1  # 해당 칸 방문 처리
        x = nx
        y = ny
        count += 1  # 방문한 칸의 수 증가
        turn_time = 0  # 회전 횟수 초기화
        continue

    else:
        turn_time += 1
    
    # 네 방향 모두 갈 수 없는 경우
    if turn_time == 4:
        nx = x - dx[direction]  # 뒤로 이동
        ny = y - dy[direction]

        # 뒤가 이동 가능한 공간인 경우 이동
        if array[nx][ny] == 0:
            x = nx
            y = ny
        else:
            break  # 뒤가 막혀 있으면 탐색 종료
        turn_time = 0

# 방문한 칸의 수 출력
print(count)

 

참 고

2023.12.08 - [IT/관련 정보] - [코딩 테스트] 이것이 취업을 위한 코딩테스트다 with 파이썬

 

[코딩 테스트] 이것이 취업을 위한 코딩테스트다 with 파이썬

코딩 테스트, 어디서부터 그리고 어떻게 준비해야될까? 이제 졸업 혹은 졸업을 앞두신 분들 그리고 개발 관련 취업에 종사하시고 싶은 분들이라면 반드시 놓치지 말아야할 점이 바로 코딩 테스

muns-da2.tistory.com

 

반응형