https://www.acmicpc.net/problem/7682
일 하면서 단계적인 생각을 하는 경우가 많은데, 이럴 때마다 문제를 접근하는 방법이 중요하다고 느낌
몸은 여기 앉아 있는데, 정신은 다른 곳에 가 있으면 문제가 많은 코드를 만들 수 밖에 없는데, 요새 들어 논리적 생각을 할 때, 이런 경우가 몇 번 있어서 훈련을 해야겠더라.
그래서 선택한건 다시 백준 문제 하나씩 푸는 것
쉬운 문제라도 논리적인 생각을 자주 하는 것이 중요하기에 차근차근 다시 시작하려함 (뭐 또 이러다 말겠지)
그래서 선택한 문제가 틱택토인데,
쉬운 문제인데 푸는데 1시간 30분 정도 걸림
확실히 생각하는 머리가 굳음 ;;
흑흑
그래서 블로그로 다시 정리하려고 키보드 잡음, 단계별로 진행하자
목적 : 주어진 문자열이 틱택토 게임에서 나타날 수 있는 상태인지 확인
접근 방법 : X의 승 / O의 승 / 무승부 경우 어떻게 결과가 나타날 수 있는지 생각
단계 1: X가 항상 먼저 시작하니, 정상적인 게임에선 X가 O보다 항상 1개 더 많거나 같다. (X >= O + 1)
단계 1-1: O가 이긴 경우 X == O / X가 이긴 경우 X == O + 1
단계 2: 무승부인 경우 빈 칸이 없다.
단계 2-1: 무승부인 경우는 한 줄을 차지하는 X와 O가 하나도 없다는 뜻 (이 경우도 정상적인 게임이니 X가 O보다 1개 더 많다)
큰 줄기는 위와 같은데, 추가적으로 필요한 것들은 X / O / .(빈 칸)의 갯수와 X / O 빙고 갯수 정도가 있겠다.
드가자
def win_chk(sy, sx, paths, game):
OX = game[sy][sx]
x_win = 0
o_win = 0
if OX == '.':
return x_win, o_win
for path in paths:
dy, dx, cnt = sy, sx, 1
while 0 <= dy + path[0] < 3 and 0 <= dx + path[1] < 3 and OX == game[dy + path[0]][dx + path[1]]:
cnt += 1
dy += path[0]
dx += path[1]
if cnt == 3:
if OX == 'O':
o_win += 1
elif OX == 'X':
x_win += 1
return x_win, o_win
start_points = [[0, 0], [0, 1], [0, 2], [1, 0], [2, 0]]
paths = [
[[0, 1], [1, 1], [1, 0]],
[[1, 0]],
[[1, -1], [1, 0]],
[[0, 1]],
[[0, 1]]
]
while True:
inp = input()
if inp == 'end':
break
game = []
tmp = []
for i in range(1, 10):
tmp.append(inp[i - 1])
if (i % 3 == 0):
game.append(tmp)
tmp = []
x_win = 0
o_win = 0
for index in range(len(start_points)):
dx_win, do_win = win_chk(start_points[index][0], start_points[index][1], paths[index], game)
x_win += dx_win
o_win += do_win
x_cnt = inp.count('X')
o_cnt = inp.count('O')
d_cnt = inp.count('.')
if x_win > o_win and x_cnt == o_cnt + 1:
print('valid')
continue
if o_win > x_win and x_cnt == o_cnt:
print('valid')
continue
if o_win == x_win == 0 and d_cnt == 0 and x_cnt == o_cnt + 1:
print('valid')
continue
print('invalid')
맥북이라 C를 못 돌려서, Python으로 풀었다.
생각해보니 JS로 풀어도 되는데, 어떻게 인풋 받는지 몰라서 헤헤헿ㅎㅎ헤헤헿ㅎㅎ;;
이 문제가 딱 녹슨 머리를 움직이게 하는데, 좋은 문제였던거 같다.
나이 30 가까워지니, 생각하는것도 지쳐서 생각을 잘 안하게 되는 경우가 많은데, 운동도 많이 하고 !! 생각도 많이 하고 !! 좋은 코드를 낳도록 하자
전부 내 새낀데, 내 새끼 어디가서 욕 먹으면, 내가 슬프잖앙.. ㅠㅠ
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
2550 - 전구 (7) | 2021.09.12 |
---|---|
12865 - 평범한 배낭 (8) | 2021.09.05 |
15683 - 감시 (0) | 2021.04.13 |
14501 - 퇴사 (4) | 2021.04.13 |
20055 - 컨베이어 벨트 위의 로봇 (2) | 2021.04.12 |