DevYoon
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (Python) ๋ณธ๋ฌธ
link ๐ https://school.programmers.co.kr/learn/courses/30/lessons/81302
๋ฌธ์ ์ค๋ช
๊ฐ๋ฐ์๋ฅผ ํฌ๋งํ๋ ์ฃ ๋ฅด๋๊ฐ ์นด์นด์ค์ ๋ฉด์ ์ ๋ณด๋ฌ ์์ต๋๋ค.
์ฝ๋ก๋ ๋ฐ์ด๋ฌ์ค ๊ฐ์ผ ์๋ฐฉ์ ์ํด ์์์๋ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฌ์ ๋๊ธฐ๋ฅผ ํด์ผํ๋๋ฐ ๊ฐ๋ฐ ์ง๊ตฐ ๋ฉด์ ์ธ ๋งํผ
์๋์ ๊ฐ์ ๊ท์น์ผ๋ก ๋๊ธฐ์ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ณ ์๋๋ก ์๋ดํ๊ณ ์์ต๋๋ค.
- ๋๊ธฐ์ค์ 5๊ฐ์ด๋ฉฐ, ๊ฐ ๋๊ธฐ์ค์ 5x5 ํฌ๊ธฐ์ ๋๋ค.
- ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ํ์ฌ ์์์๋ค ๋ผ๋ฆฌ๋ ๋งจํดํผ ๊ฑฐ๋ฆฌ1๊ฐ 2 ์ดํ๋ก ์์ง ๋ง์ ์ฃผ์ธ์.
- ๋จ ์์์๊ฐ ์์์๋ ์๋ฆฌ ์ฌ์ด๊ฐ ํํฐ์ ์ผ๋ก ๋งํ ์์ ๊ฒฝ์ฐ์๋ ํ์ฉํฉ๋๋ค.
5๊ฐ์ ๋๊ธฐ์ค์ ๋ณธ ์ฃ ๋ฅด๋๋ ๊ฐ ๋๊ธฐ์ค์์ ์์์๋ค์ด ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์ ๊ธฐํค๊ณ ์๋์ง ์๊ณ ์ถ์ด์ก์ต๋๋ค. ์๋ฆฌ์ ์์์๋ ์์์๋ค์ ์ ๋ณด์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋๊ธฐ์ค๋ณ๋ก ๋ด์ 2์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด places๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๊ฐ ๋๊ธฐ์ค๋ณ๋ก ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช ์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ
- places์ ํ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ์) = 5
- places์ ๊ฐ ํ์ ํ๋์ ๋๊ธฐ์ค ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค.
- places์ ์ด ๊ธธ์ด(๋๊ธฐ์ค ์ธ๋ก ๊ธธ์ด) = 5
- places์ ์์๋ P,O,X๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์
๋๋ค.
- places ์์์ ๊ธธ์ด(๋๊ธฐ์ค ๊ฐ๋ก ๊ธธ์ด) = 5
- P๋ ์์์๊ฐ ์์์๋ ์๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
- O๋ ๋น ํ ์ด๋ธ์ ์๋ฏธํฉ๋๋ค.
- X๋ ํํฐ์ ์ ์๋ฏธํฉ๋๋ค.
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ 5๊ฐ ๋๊ธฐ์ค์ ํฌ๊ธฐ๋ ๋ชจ๋ 5x5 ์ ๋๋ค.
- return ๊ฐ ํ์
- 1์ฐจ์ ์ ์ ๋ฐฐ์ด์ 5๊ฐ์ ์์๋ฅผ ๋ด์์ return ํฉ๋๋ค.
- places์ ๋ด๊ฒจ ์๋ 5๊ฐ ๋๊ธฐ์ค์ ์์๋๋ก, ๊ฑฐ๋ฆฌ๋๊ธฐ ์ค์ ์ฌ๋ถ๋ฅผ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ต๋๋ค.
- ๊ฐ ๋๊ธฐ์ค ๋ณ๋ก ๋ชจ๋ ์์์๊ฐ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์งํค๊ณ ์์ผ๋ฉด 1์, ํ ๋ช ์ด๋ผ๋ ์งํค์ง ์๊ณ ์์ผ๋ฉด 0์ ๋ด์ต๋๋ค.
def solution(places):
answer = []
for idx in range(len(places)):
flag = 1
board = places[idx]
people = []
# ์ฌ๋๋ค์ด ์์ ์๋ ์๋ฆฌ ๊ตฌํ๊ธฐ
for y in range(5):
for x in range(5):
if board[y][x] == 'P':
people.append((y, x))
# ํ ์ฌ๋์ฉ ๋ค๋ฅธ ์ฌ๋๊ณผ์ ๋งจํดํผ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
for now in range(len(people) - 1):
nowY, nowX = people[now]
for next in range(now + 1, len(people)):
nextY, nextX = people[next]
# ๋งจํดํผ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
distance = abs(nowY - nextY) + abs(nowX - nextX)
# ๋งจํดํผ ๊ฑฐ๋ฆฌ๊ฐ 2์ดํ์ด๋ฉด
if distance <= 2:
partition = 0
# ๊ฐ์ ํ์ด๋ ์ด์ ์์ ์์ผ๋ฉด ์ฌ์ด์ ํํฐ์
์ด 1๊ฐ ํ์ํจ
if nowY == nextY or nowX == nextX:
need = 1
# ์ด๊ณผ ํ์ด ๋ชจ๋ ๋ค๋ฅด๋ฉด ์ฌ์ด์ ํํฐ์
2๊ฐ๊ฐ ํ์ํจ
else:
need = 2
# min ๋ถํฐ max๊น์ง ํ๊ณผ ์ด์ ๋๋ฉฐ ํํฐ์
๊ฐ์ ์ธ์ด์ฃผ๊ธฐ
minY, maxY = min(nowY, nextY), max(nowY, nextY)
minX, maxX = min(nowX, nextX), max(nowX, nextX)
for y in range(minY, maxY+1):
for x in range(minX, maxX+1):
# ํํฐ์
์ด๋ฉด ++
if board[y][x] == 'X':
partition += 1
# ํ์ํ ํํฐ์
๊ฐ์์ ์ค์ ์๋ ๊ฐ์๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด flag = 0
if need != partition:
flag = 0
break
# ํ ๋ฒ์ด๋ผ๋ ์ด๊ฒผ๋ค๋ฉด ๊ทธ๋ง ๊ฒ์ฌ
if flag == 0:
break
answer.append(flag)
return answer
- ๋งจํดํผ ๊ฑฐ๋ฆฌ๊ฐ 2์ดํ์ธ ๋ ์ฌ๋์ด ๊ฐ์ ํ์ด๋ ๊ฐ์ ์ด์ ์์ ์๋ค๋ฉด ์ฌ์ด์ ํํฐ์ ์ด 1๊ฐ ํ์ํ๊ณ , ์ด๊ณผ ํ์ด ๋ชจ๋ ๋ค๋ฅด๋ค๋ฉด ์ฌ์ด์ ํํฐ์ ์ด 2๊ฐ ์์ด์ผ ๊ฑฐ๋ฆฌ๋๊ธฐ๋ฅผ ์๋ฐํ์ง ์๊ฒ ๋๋ค!