현제의 현재이야기
[SWExpertAcademy] 15612. 체스판 위의 룩 배치 본문
n = int(input())
result = []
for _ in range(n):
arr = [input() for _ in range(8)]
check_x = [0] * 8
check_y = [0] * 8
cnt = 0
rst = 0
for i in range(8):
for j in range(8):
if arr[i][j] == 'O':
cnt += 1
if check_x[j] == 1 or check_y[i] == 1 or cnt > 8:
result.append(0)
rst = 1
break
else:
check_x[j] = 1
check_y[i] = 1
if rst == 1:
break
if rst != 1 and cnt < 8:
result.append(0)
elif rst != 1 and cnt == 8:
result.append(1)
result_cnt = 0
for target in result:
result_cnt += 1
if target == 0:
print(f"#{result_cnt} no")
else:
print(f"#{result_cnt} yes")
| 알고리즘
- check x, check y 배열을 만들어서 이중 for문을 통해서 그래프 탐색
- 만약에 'O'를 만나면 cnt('O'의 개수) 하나를 추가하고 해당 좌표에 x축, y축에 이미 1이 존재하는지 확인
- 만약 1이 존재하면 해당 직선에 (+ 로) 룩이 존재하는 것이기 때문에 result에 0을 넣어주고 rst를 1로 설정하고 break
- 추후 이 rst는 이중 for문을 빠져나갈 때 사용
- 만약 해당 x, y 배열에 1이 아니라 0이라면 그 곳을 1로 변경
- for 문을 다 돈 뒤, break문을 통해 빠져나왔지 않고 룩의 개수가 8개 미만이면 result에 0을 삽입 (실패)
- break문을 통해 빠져나왔지 않고 룩의 개수가 8개면 result에 성공을 추가
| 알게된 점
이중 for문을 빠져나올 때, rst를 활용하여 두번 빠져나오면 효과적으로 빠져나올 수 있다.
for i in range(n):
for j in range(n):
if j == i:
rst = 1
break
if rst == 1:
break
이런 식으로 if의 위치를 설정한다.
삼성 문제는 처음 풀어보는데 생각보다 시간, 메모리가 넉넉한 것 같다.
'algorithm' 카테고리의 다른 글
[SWExpertAcademy] 14692. 통나무 자르기 (0) | 2022.11.19 |
---|---|
[백준/python] 2302 - 극장 좌석 (0) | 2022.11.08 |
[백준/python] 11047 - 동전0 (0) | 2022.10.04 |
[백준/python] 2468 - 안전 영역 (1) | 2022.10.01 |
[백준/python] 5430 - AC (1) | 2022.09.30 |
Comments