https://www.acmicpc.net/problem/18428
정답률 32.032%
난이도 골5
코드 설명
1. 입력 받기
2. 선생님, 학생, 장애물 후보 좌표
3. 장애물 조합별로 체크
4. 체크
※ 주의할 점
- 입력받는 동시에 좌표 저장해놓으면 시간 절약
- 왜 안되는지 모르겠을 땐 출력이 "YES", "NO"인지도 확인해보기..
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
# 4. 체크
def check(oa):
for x, y in ta:
for d in range(4):
cnt = 1
for cnt in range(1, N):
nx, ny = x + cnt * dx[d], y + cnt * dy[d]
if nx == -1 or nx == N or ny == -1 or ny == N:
break
elif (nx, ny) in oa:
break
elif (nx, ny) in sa:
return False
return True
# 1. 입력 받기
N = int(input())
ta = []
sa = []
cand = []
board = []
for i in range(N):
temp = list(map(str, input().split()))
# 2. 선생님, 학생, 장애물 후보 좌표
for j in range(N):
if temp[j] == "T":
ta.append((i, j))
elif temp[j] == "S":
sa.append((i, j))
else:
cand.append((i, j))
board.append(temp)
# 3. 장애물 조합별로 체크
cl = len(cand)
ans = False
for i in range(cl - 2):
for j in range(i + 1, cl - 1):
for k in range(j + 1, cl):
oa = [cand[i], cand[j], cand[k]]
ans = check(oa)
if ans:
print("YES")
break
if ans:
break
if ans:
break
else:
print("NO")
코드 결과
'백준 삼성' 카테고리의 다른 글
(기출x)[python] 10825 - 국영수 (1) | 2022.09.02 |
---|---|
[python] 16234 - 인구 이동 (0) | 2022.08.31 |
[python] 14888 - 연산자 끼워넣기 (0) | 2022.08.30 |
[python] 17779 - 게리맨더링 2 (0) | 2022.08.29 |
[python] 19236 - 청소년 상어 (0) | 2022.08.27 |