일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘 특강
- 2017
- agcu컵
- 코딩테스트
- 백준
- 구름톤 챌린지
- ICPC
- newbie programming contest
- 전국 대학생 프로그래밍 대회 동아리 연합
- 삼성전자
- 서울대학교
- 파일 생성 불가
- 프로그래밍 경시대회
- 코딩테스트실력진단
- 삼성전자 코딩테스트
- 선린고등학교
- 파이썬
- 코드트리
- 2023
- 인하대학교
- 알고리즘
- 사내자격증
- iucpc
- certi
- B형
- PRO
- 코딩트리조별과제
- 알고리즘특강
- Python
- 구현
Archives
- Today
- Total
니노니나니
[백준2615번] 오목 - S1/Python 본문
https://www.acmicpc.net/problem/2615
문제
오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번, ... 19번의 번호가 붙는다.
위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다.
입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성하시오. 단, 검은색과 흰색이 동시에 이기거나 검은색 또는 흰색이 두 군데 이상에서 동시에 이기는 경우는 입력으로 들어오지 않는다.
입력
19줄에 각 줄마다 19개의 숫자로 표현되는데, 검은 바둑알은 1, 흰 바둑알은 2, 알이 놓이지 않는 자리는 0으로 표시되며, 숫자는 한 칸씩 띄어서 표시된다.
풀이
#팔각이동:
directions = [(1, 0), (0, 1), (1, 1), (1, -1)]
field = [list(map(int, input().split())) for _ in range(19)]
visited = [[0]*19 for _ in range(19)]
for i in range(19):
for j in range(19):
# 0 이 아닌 경우
if field[i][j] != 0 and visited[i][j] == 0:
visited[i][j] = 1
for k in range(4):
combo, total, l = [(i+1,j+1)], 1, 1
# print(f'Start combo: {i,j}')
while True:
next_x, next_y = i+l*directions[k][0], j + l*directions[k][1]
if (0 <= next_x < 19 and 0 <= next_y < 19) and field[next_x][next_y] == field[i][j]:
combo.append((next_x+1, next_y+1))
total += 1
else:
break
l += 1
# print(total)
if total == 5:
combo.sort(key=lambda x: (x[1], x[0]))
print(field[i][j])
print(*combo[0])
exit()
elif total > 5:
for tx, ty in combo:
visited[tx-1][ty-1] = 1
print(0)
해결방법
여섯개이상 일렬로 놓인 경우는 승리할 수 없기 때문에 해당 조건 예외를 구현하는 것이 중요한 문제.
또한, 승리한 경우 오목이 두어진 위치에서 가장 왼쪽에 놓긴 것을 출력해야 하는 조건도 유의할 것.
입력 크기도 작아서 시간 초과가 발생할 수 없는 문제이지만 문제에서 제시한 조건 때문에 난이도가 높게 책정된 문제라고 볼 수 있다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준21965번] 드높은 남산 위에 우뚝 선 - B1/Python (0) | 2024.08.28 |
---|---|
[백준1914번] 하노이 탑 - G5/Python (0) | 2024.08.24 |
[백준/3061번] 사다리 - S2/Python (0) | 2024.08.22 |
[백준/9347번] 울타리 - G3/Python (0) | 2024.08.21 |
[백준/1366번] 킥보드로 등교하기 - G4/Python (1) | 2024.08.21 |