게임 개발
유형 : 구현
출처 : 이것이 취업을 위한 코딩 테스트다. 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 파이썬
반응형
'Programming Test > 코테 대비 과정' 카테고리의 다른 글
[알고리즘 공부] 미로 탈출 (0) | 2024.03.28 |
---|---|
[알고리즘 공부] 음료수 얼려 먹기 (0) | 2024.03.24 |
[알고리즘 공부] 왕실의 나이트 (0) | 2024.03.22 |
[알고리즘 공부] 시각 (0) | 2024.03.22 |
[알고리즘 공부] 1이 될 때까지 (0) | 2024.03.20 |