2020. 9. 4. 00:04ใ์นดํ ๊ณ ๋ฆฌ ์์
๊ฒ์ ๊ฐ๋ฐ - ์ด๊ฒ์ด ์ฝ๋ฉํ ์คํธ๋ค
๋ฌธ์ :
ํ๋ฏผ์ด๋ ๊ฒ์ ์ผ๋ฆญํฐ๊ฐ ๋งต ์์์ ์์ง์ด๋ ์์คํ ์ ๊ฐ๋ฐ ์ค์ด๋ค. ์บ๋ฆญํฐ๊ฐ ์๋ ์ฅ์๋ 1 X 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ์ด๋ค์ง N X M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก, ๊ฐ๊ฐ์ ์นธ์ ์ก์ง ๋๋ ๋ฐ๋ค์ด๋ค. ์บ๋ฆญํฐ๋ ๋์๋จ๋ถ ์ค ํ ๊ณณ์ ๋ฐ๋ผ๋ณธ๋ค.
๋งต์ ๊ฐ ์นธ์ (A, B)๋ก ๋ํ๋ผ ์ ์๊ณ , A๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, B๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค. ์บ๋ฆญํฐ๋ ์ํ์ข์ฐ๋ก ์์ง์ผ ์ ์๊ณ , ๋ฐ๋ค๋ก ๋์ด ์๋ ๊ณต๊ฐ์๋ ๊ฐ ์ ์๋ค. ์บ๋ฆญํฐ์ ์์ง์์ ์ค์ ํ๊ธฐ ์ํด ์ ํด ๋์ ๋ฉ๋ด์ผ์ ์ด๋ฌํ๋ค.
1. ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ(๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ํ ๋ฐฉํฅ)๋ถํฐ ์ฐจ๋ก๋๋ก ๊ฐ ๊ณณ์ ์ ํ๋ค.
2. ์บ๋ฆญํฐ์ ๋ฐ๋ก ์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ๊ฐ๋ณด์ง ์์ ์นธ์ด ์กด์ฌํ๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ์ผ์ชฝ์ผ๋ก ํ ์นธ์ ์ ์งํ๋ค. ์ผ์ชฝ ๋ฐฉํฅ์ ๊ฐ๋ณด์ง ์์ ์นธ์ด ์๋ค๋ฉด, ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ํ์ ๋ง ์ํํ๊ณ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค.
3. ๋ง์ฝ ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ด๋ฏธ ๊ฐ๋ณธ ์นธ์ด๊ฑฐ๋ ๋ฐ๋ค๋ก ๋์ด ์๋ ์นธ์ ๊ฒฝ์ฐ์๋, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ๋ค๋ก ๊ฐ๊ณ 1๋จ๊ณ๋ก ๋์๊ฐ๋ค. ๋จ, ์ด๋ ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฐ๋ค์ธ ์นธ์ด๋ผ ๋ค๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ง์์ ๋ฉ์ถ๋ค.
ํ๋ฏผ์ด๋ ์ ๊ณผ์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ฉด์ ์บ๋ฆญํฐ์ ์์ง์์ ์ด์์ด ์๋์ง ํ ์คํธํ๋ ค๊ณ ํ๋ค. ๋ฉ๋ด์ผ์ ๋ฐ๋ผ ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํจ ๋ค์, ์บ๋ฆญํฐ๊ฐ ๋ฐฉ๋ฌธํ ์นธ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋์์ค.
์ ๋ ฅ ์กฐ๊ฑด :
- ์ฒซ์งธ ์ค์ ๋งต์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํ๋ค.(N>=3, M<=50)
- ๋์งธ ์ค์ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์๋ ์นธ์ ์ขํ(A, B)์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ d๊ฐ ๊ฐ๊ฐ ์๋ก ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฃผ์ด์ง๋ค. ๋ฐฉํฅ d์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
- 0: ๋ถ์ชฝ
- 1: ๋์ชฝ
- 2: ๋จ์ชฝ
- 3: ์์ชฝ
- ์ ์งธ ์ค๋ถํฐ ๋งต์ด ์ก์ง์ธ์ง ๋ฐ๋ค์ธ์ง ์ ๋ ฅํ๋ค. N๊ฐ์ ์ค์ ๋งต์ ์ํ๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ ์์๋๋ก, ๊ฐ ์ค์ ๋ฐ์ดํฐ๋ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋งต์ ์ธ๊ณฝ์ ํญ์ ๋ฐ๋ค๋ก ๋์ด ์๋ค.
- 0: ์ก์ง
- 1: ๋ฐ๋ค
- ์ฒ์์ ๊ฒ์ ์บ๋ฆญํฐ๊ฐ ์์นํ ์นธ์ ์ํ๋ ํญ์ ์ก์ง์ด๋ค.
์ถ๋ ฅ ์กฐ๊ฑด :
- ์ฒซ์งธ ์ค์ ์ด๋์ ๋ง์น ํ ์บ๋ฆญํฐ๊ฐ ๋ฐฉ๋ฌธํ ์นธ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ์ ๊ทผ:
- ๋์๋จ๋ถ์ด ์๊ณ ๋ฐฉํฅ์ด ์กด์ฌํ๋ ๋ฌธ์ . -> ๋ฐฉํฅ์ ์ด์ฉํ๋ ํจ์๋ฅผ ๊ตฌํํ๋ฉด ์ด๋จ๊น? ๊ทธ ๋ฐฉํฅ(dx์ ์ธ๋ฑ์ค)์ ๋ฐ๋ผ ๋ถ,๋,๋จ,์๋ก ์ด๋์ ํ๊ณ , 1์ธ๊ฒฝ์ฐ์๋ ๊ฐ ์ ์๊ณ 0์ธ ๊ฒฝ์ฐ์๋ ๊ฐ ์ ์๋๋ก ํด๋ณด์.
๊ฐ๋ณด์ง ์์ ์นธ๊ณผ ๊ฐ๋ณธ ์นธ์ ์ผ์ด์ค๋ฅผ ๋๋ ์ ์๊ฐํ๋ค๋ ๊ฒ์ ๊ฐ๋ ๊ธธ์ธ์ง ์๋์ง๋ฅผ ํ๋ณํด์ฃผ๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ค๋ ๊ฒ๋ ์ผ๋ํด ๋๊ณ ๊ฐ์.
n,m = map(int,input().split())
x,y,direction = map(int,input().split())
array = []
for i in range(n):
array.append(list(map(int,input().split())))
d = [[0]*m for _ in range(n)]
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] == 1:
break
else :
x = nx
y = ny
turn_time =0
print(count)
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋๋์ :
- array๋ฆฌ์คํธ์ ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ์ ๋ array = list(map(int,input().split()))๋ก ๋ฐ์๋๋ฐ, 2์ฐจ์ ๋ฐฐ์ด์ ์ํด์๋ array.append๋ฅผ ์จ์ผํ๋ค๋ ๊ฒ์ ์์๋ค. ์ ์๋ก ํ๊ฒ ๋๋ค๋ฉด ๊ณ์ํด์ ์ด๊ธฐํ ๋ array๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- turn_left()ํจ์๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ๋ ์ ์ฒด์ ์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์๊ฒ ๋์๋ค.
- d= [[0]*m for _ in range(m)]๋ฐฉ์๋ ์ตํ๋ฌ์ผ ๊ฒ ๋ค.
- ๋ง์ง๋ง๊น์ง ์ ๋ฅผ ๋จน์๋ ๊ฒ์ turn_time =0์ด๋ค. ๋ง์ง๋ง์ if๋ฌธ else๋ฌธ์ ๋์์ ์ ๊ฑธ ๋ฐ๋์ ํด์ค์ผ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์งํ๋๋ค. ๋ง์ฝ ํ์ง์์ผ๋ฉด ๊ณ์ ๋๊ฐ์ ๊ฒ๋ง ๋ฐ๋ณตํ๊ฒ ๋๋ค. ์ฐธ๊ณ ํ์.