FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-algorithm/Implement/4-4.py at main · JONGSKY/python-algorithm · GitHub
JONGSKY
/
python-algorithm
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
0
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
python-algorithm
/
Implement
/
4-4.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
101 lines (91 loc) · 3.97 KB
Breadcrumbs
python-algorithm
/
Implement
/
4-4.py
Copy path
File metadata and controls
101 lines (91 loc) · 3.97 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 문제
# 게임 캐릭터가 있는 장소는 1*1크기의 정사각형으로 이뤄진 N*M크기의 직사각형으로, 각각의 칸은 육지 또는 바다이다.
# 캐릭터는 동서남북 중 하나의 곳으로 바라본다.
# A는 북쪽으로 떨어진 칸의 개수, B는 서쪽으로부터 떨어진 칸의 개수이다.
# 캐릭터는 상하좌우로 이동가능하며, 바다로 되어있는 공간에는 갈 수 없다.
# 캐릭터가 움직일 후 있는 메뉴얼은 다음과 같다.
# 1. 현재 위치에서 현재 방향을 기준으로 왼쪽방향(반시계방향으로 90도 회전한 방향)부터 차례대로 갈 곳을 정한다.
# 2. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존자한다면, 왼쪽 방향으로 회전한 다음 왼쪽으로 한 칸을 전진한다.
# 왼쪽 방향에 가보지 않은 칸이 없다면, 왼쪽 방향으로 회전만 수행하고 다시 1단계로 돌아간다.
# 3. 만약 네 방향 모두 이미 가본 칸이거나 바다로 되어있는 칸인 경우에는, 바라보는 방향을 유지한 채로 한 칸 뒤로 이도하고 1단계로 돌아간다.
# 단, 이떄 뒤쪽 방향이 바다인 칸이라 뒤로 갈 수 없는 경우에는 움직임을 멈춘다.
#
# 메뉴얼에 따라 움직이고 캐릭터가 방문한 칸의 수를 출력하는 프로그램을 만드시오.
# 입력조건
# 1. 첫째 줄에 맵의 세로 크기 N과 사로크기 M을 공백으로 구분하여 입력한다. (3<=N,M<=50)
# 2. 둘째 줄에 게임 캐릭터가 있는 칸의 좌표 (A,B)와 바라보는 방향 d가 각각 서로 공백으로 구분하여 주어진다.
# 방향 d의 값으로는 다음과 같이 4가지가 존재한다.
# - 0 : 북쪽
# - 1 : 동쪽
# - 2 : 남쪽
# - 3 : 서쪽
# 3. 셋쨰 줄부터 맵이 육지인지 바다인지 대한 정보가 주어진다. N개의 줄에 맴의 상태가 북쪽부터 남쪽순서대로,
# 각 줄의 데이터는 서쪽부터 동쪽 순서대로 주어진다. 맴의 외곽은 항상 바다로 되어있다.
# - 0 : 육지
# - 1 : 바다
# 4. 처음에 게임 캐릭터가 위치한 칸의 상태는 항상 육지이다.
#
# # 출력조건
# 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을 공백으로 구분하여 입력받기
n
,
m
=
map
(
int
,
input
(
'n,m을 공백으로 입력해주세요 : '
).
split
())
#방문한 위치를 저장하기 위한 맴을 생성하여 0으로 초기화
d
=
[[
0
]
*
m
for
_
in
range
(
n
)]
#현재 캐릭터의 X좌표, Y좌표, 방향을 입력받기
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
# 시뮬레이션 시작
count
=
1
turn_time
=
0
while
True
:
# 왼쪽으로 회전
turn_left
()
nx
=
x
+
dx
[
direction
]
ny
=
y
+
dy
[
direction
]
# 회전한 이후 정면에 가보지 않은 칸이 존재하는 경우 이동
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
)
Back
|
FazBrowse Home
|
New Git URL