λ¬Έμ
ν±νν κ²μμ λ λͺ μ μ¬λμ΄ λ²κ°μκ°λ©° λ§μ λλ κ²μμ΄λ€. κ²μνμ 3×3 격μνμ΄λ©°, μ²μμλ λΉμ΄ μλ€. λ μ¬λμ κ°κ° X λλ O λ§μ λ²κ°μκ°λ©° λλλ°, λ°λμ 첫 λ²μ§Έ μ¬λμ΄ Xλ₯Ό λκ³ λ λ²μ§Έ μ¬λμ΄ Oλ₯Ό λλλ€. μ΄λ λλ μ§ ν μ¬λμ λ§μ΄ κ°λ‘, μΈλ‘, λκ°μ λ°©ν₯μΌλ‘ 3μΉΈμ μλ λ° μ±κ³΅νλ©΄ κ²μμ μ¦μ λλλ€. κ²μνμ΄ κ°λ μ°¨λ κ²μμ λλλ€.
κ²μνμ μνκ° μ£Όμ΄μ§λ©΄, κ·Έ μνκ° ν±νν κ²μμμ λ°μν μ μλ μ΅μ’ μνμΈμ§λ₯Ό νλ³νμμ€.
μ λ ₯
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° μ€μ 9κ°μ λ¬Έμλ₯Ό ν¬ν¨νλ©°, 'X', 'O', '.' μ€ νλμ΄λ€. '.'μ λΉμΉΈμ μλ―Ένλ©°, 9κ°μ λ¬Έμλ κ²μνμμ μ μΌ μ μ€ μΌμͺ½λΆν°μ μμμ΄λ€. μ λ ₯μ λ§μ§λ§μλ λ¬Έμμ΄ "end"κ° μ£Όμ΄μ§λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λ§λ€ ν μ€μ μ λ΅μ μΆλ ₯νλ€. κ°λ₯ν κ²½μ° "valid", λΆκ°λ₯ν κ²½μ° "invalid"λ₯Ό μΆλ ₯νλ€.

λ¬Έμ νμ΄
import sys
# μ΅μ’
μνκ° κ°λ₯ν κ²½μ°
# 1) Xμ κ°μ = 5, Oμ κ°μ =4 μ΄λ©΄μ κ²μνμ΄ λͺ¨λ μ°¨μμ(λ¨, X,0 λͺ¨λ 3μΉΈμ μ±μ΄ μνκ° μλ)
# 2) Xμ κ°μ = Oμ κ°μμ΄λ©΄μ Oκ° 3μΉΈμ μ΄μ κ²½μ°
# 3) Xμ κ°μ = Oμ κ°μ+1 μ΄λ©΄μ Xκ° 3μΉΈμ μ΄μ κ²½μ°
# Xκ° μλκ°μ μ μ΄λ£¨λ κ²½μ°λ₯Ό μ μΈνκ³ , ν μ€λ§ λ§μ‘±ν΄μΌ ν¨.
def success(tictactoe, xoro):
# λκ°μ λ§μ‘±νλ λΌμΈ κ°μ
dia_line=0
# ννμ λ§μ‘±νλ λΌμΈ κ°μ
pal_line=0
# 3μ€μ λ§μ‘±νλ κ²½μ° μ°ΎκΈ°
# 1μ€ μ΄μ λ§μ‘±νλ©΄ λΆκ°λ₯ν κ²½μ°μ΄κΈ° λλ¬Έμ line λ³μμ λ§μ‘±νλ μ€μ κ°μλ₯Ό μ μ₯ν¨.
# λκ°μ μΌλ‘ λ§μ‘±νλ κ²½μ°
if tictactoe[0][0]==xoro and tictactoe[1][1]==xoro and tictactoe[2][2]==xoro:
dia_line+=1
if tictactoe[0][2]==xoro and tictactoe[1][1]==xoro and tictactoe[2][0]==xoro:
dia_line+=1
for i in range(3):
if tictactoe[i][0]==xoro and tictactoe[i][1]==xoro and tictactoe[i][2]==xoro:
pal_line+=1
if tictactoe[0][i]==xoro and tictactoe[1][i]==xoro and tictactoe[2][i]==xoro:
pal_line+=1
# 1μ€λ§ λ§μ‘±νλ κ²½μ°
if dia_line+pal_line==1:
return True
elif dia_line==2:
return True
else:
return False
while True:
tictactoe=sys.stdin.readline().strip()
if tictactoe=='end':
sys.exit(0)
tictactoe2d=[list(tictactoe[:3]),list(tictactoe[3:6]),list(tictactoe[6:])]
# Xμ κ°μ
numX=tictactoe.count('X')
# Oμ κ°μ
numY=tictactoe.count('O')
# Xμ κ°μ = Oμ κ°μ +1 μΈ κ²½μ°
if numX==numY+1:
# κ½ μ±μμ Έ μλλ° λꡬλ μ΄κΈ°μ§ λͺ»νκ³ μ’
λ£λλ κ²½μ°
if numX==5 and numY==4 and not success(tictactoe2d,'X') and not success(tictactoe2d, 'O'):
print('valid')
# Xκ° μ΄κΈ°λ κ²½μ°(ν μ€λ§ λ§μ‘±νλ©΄μ 'O'λ νμ€λ λ§μ‘±νλ©΄ μλ¨)
elif success(tictactoe2d,'X') and not success(tictactoe2d, 'O'):
print('valid')
# λ κ²½μ° λͺ¨λ μλλ©΄ μ΅μ’
μνμ λλ¬ν μ μλ μνκ° μλ
else:
print('invalid')
elif numX==numY:
# Oκ° μ΄κΈ°λ κ²½μ°
if success(tictactoe2d,'O') and not success(tictactoe2d,'X'):
print('valid')
else:
print('invalid')
else:
print('invalid')
κ·μΉμ μ°Ύμμ ꡬννλ λ¬Έμ μλ€. μ²μμ μκ°νμ§ λͺ»νλ λ°λ‘κ° μμ΄μ νλ Έλ€κ° μ§λ¬Έ κ²μνμ λ³΄κ³ μμλ€!
μ²μμ μκ°νλ μ΅μ’ μνκ° λ μ μλ κ·μΉμ
- λͺ¨λ κ½ μ±μμ Έμ μ΅μ’ μνκΉμ§ μ¨ κ²½μ° : Xκ° 5κ°, Oκ° 4κ°μ΄λ©΄μ X,O λͺ¨λ ν μ€μ μ±μ°μ§ λͺ»ν μν
- Oλ‘ μ΄κΈ΄ κ²½μ° : Xμ Oμ κ°μκ° λμΌνκ³ Oκ° ν μ€μ μ±μ΄ κ²½μ°
- Xλ‘ μ΄κΈ΄ κ²½μ° : Xμ κ°μκ° Oμ κ°μλ³΄λ€ ν κ° λ λ§κ³ Xκ° ν μ€μ μ±μ΄ κ²½μ°
ꡬνμ μ½κ² νλ €κ³ μ λ ₯λ°μ κ²μν tictactoe λ¬Έμμ΄μ 2μ°¨μ λ°°μ΄λ‘ λ³κ²½ν΄μ tictactoe2d λ°°μ΄μ μ μ₯νλ€.
κ·Έλ¦¬κ³ numXμ Xμ κ°μλ₯Ό μ μ₯νκ³ , numYμ Oμ κ°μλ₯Ό μ μ₯νλ€.
(λ³μλͺ μ numOλ‘ νμ΄μΌ νλλ° Xκ° λμ€λ€λ³΄λ 무μμμ μΌλ‘ numYλ‘ μ€μ νλ€π..)
μ΄ν μ°¨λ‘λ‘ μμμ μκ°νλ κ·μΉμ λ§μ‘±νλμ§ νμΈνλ€.
numX=numY+1μΈ κ²½μ°λ μμμ μμνλ κ·μΉ 1λ²κ³Ό 3λ²μ λ§μ‘±ν κ°λ₯μ±μ΄ μλ€.
λ¨Όμ numX=5μ΄κ³ , numY=4μΈ κ²½μ°μ κ²μνμ΄ κ½ μ±μμ§ μνμΈλ° X, O λͺ¨λ ν μ€μ λ§λ€μ§ λͺ»νλμ§ success ν¨μλ‘ νμΈνλ€.
(success ν¨μ μ½λ μ€λͺ μ λ°μ μλ€)
κ·Έλ¦¬κ³ Xκ° μ΄κΈ°λ κ²½μ°μΈμ§ νμΈνλλ°, μ΄ κ²½μ°μ Xλ ν μ€λ§ λ§μ‘±νλ©΄μ Oλ ν μ€λ λ§μ‘±ν΄μλ μλλ€.
μ¬κΈ°μ Xκ° ν μ€λ§ λ§μ‘±νλμ§ νμΈνλ κ² λΏλ§ μλλΌ Oκ° ν μ€λ λ§μ‘±νμ§ λͺ»νλμ§ νμΈνλ κ²λ μ€μνλ€.
μλνλ©΄ Oκ° ν μ€μ λ§λλμ§ νμΈνμ§ μμΌλ©΄ μλμ κ°μ κ²½μ°λ νν°λ§νμ§ λͺ»νκΈ° λλ¬Έμ΄λ€.
O | X | X |
O | O | O |
X | X | X |
λ€μμΌλ‘ numX==numY+1μ λ§μ‘±νμ§λ§ μ λ κ°μ§ κ²½μ°κ° μλ κ²½μ°λ μ΅μ’ μνκ° μλλ―λ‘ invalidλ₯Ό μΆλ ₯νλ€.
λ€μμΌλ‘, numX==numYμΈ κ²½μ°λ Oκ° μ΄κΈ°λ κ²½μ°μΈμ§ νμΈνκΈ° μν΄μ Oκ° ν μ€μ λ§λ€λ©΄μ Xκ° ν μ€μ λ§λ€μ§ λͺ»νλμ§ νμΈν΄μΌ νλ€.
μλ₯Ό λ€μ΄ μλμ κ²½μ°, Xκ° λ¨Όμ ν μ€μ μ±μ°κ³ κ²μμ΄ λλκΈ° λλ¬Έμ Oκ° λ€μ ν μ€μ μ±μΈ μ μλ€.
X | O | . |
X | O | . |
X | O | . |
κ·Έλ°λ° λ¨μν success(tictactoe2d, 'O')λ₯Ό ν΅ν΄μ Oκ° ν μ€μ μ±μ°λμ§λ§ νμΈνλ μ½λλ₯Ό μ μΆνκ³ ν΅κ³Όλ₯Ό λ°μμλλ° λ€μ μκ°ν΄λ³΄λ μμ κ²½μ°λ λΆκ°λ₯νμ§λ§ validν κ²½μ°λΌκ³ μΆλ ₯νλλ°λ λΆκ΅¬νκ³ ν΅κ³Όκ° λλ€. κ·Έλμ μ§λ¬Έ κ²μνμ μ μΌμ΄μ€μ λν΄μ μ§λ¬Έμ λ¨κ²¨λ μνμ΄λ€!
μ΄μ success ν¨μμ λν΄μ μ½λ μ€λͺ μ ν΄λ³΄μλ©΄ λ€μκ³Ό κ°λ€.
def success(tictactoe, xoro):
# λκ°μ λ§μ‘±νλ λΌμΈ κ°μ
dia_line=0
# ννμ λ§μ‘±νλ λΌμΈ κ°μ
pal_line=0
# 3μ€μ λ§μ‘±νλ κ²½μ° μ°ΎκΈ°
# 1μ€ μ΄μ λ§μ‘±νλ©΄ λΆκ°λ₯ν κ²½μ°μ΄κΈ° λλ¬Έμ line λ³μμ λ§μ‘±νλ μ€μ κ°μλ₯Ό μ μ₯ν¨.
# λκ°μ μΌλ‘ λ§μ‘±νλ κ²½μ°
if tictactoe[0][0]==xoro and tictactoe[1][1]==xoro and tictactoe[2][2]==xoro:
dia_line+=1
if tictactoe[0][2]==xoro and tictactoe[1][1]==xoro and tictactoe[2][0]==xoro:
dia_line+=1
for i in range(3):
if tictactoe[i][0]==xoro and tictactoe[i][1]==xoro and tictactoe[i][2]==xoro:
pal_line+=1
if tictactoe[0][i]==xoro and tictactoe[1][i]==xoro and tictactoe[2][i]==xoro:
pal_line+=1
# 1μ€λ§ λ§μ‘±νλ κ²½μ°
if dia_line+pal_line==1:
return True
elif dia_line==2:
return True
else:
return False
λ¨Όμ λκ°μ μ λ§μ‘±νλ κ²½μ° dia_lineμ +1μ νλ€.
κ·Έλ¦¬κ³ forλ¬Έμ λλ©΄μ ν λλ μ΄μ κΈ°μ€μΌλ‘ λ§μ‘±νλμ§ pal_lineμ +1μ νλ€.
μ΄λ κ² λ§μ‘±νλ μ€μ μλ₯Ό λͺ¨λ ꡬν λ€μμ, dia_lineκ³Ό pal_lineμ λν΄μ 1μ€λ§ λ§μ‘±νλμ§ νμΈνκ³ , 1μ€λ§ λ§μ‘±νλ€λ©΄ Trueλ₯Ό 리ν΄νλ€.
κ·Έλ¦¬κ³ dia_lineμ 2μ€μΌ λλ Trueλ₯Ό 리ν΄ν΄μΌ νλ€.
μ΄ λΆλΆμ΄ μμ μΈκΈνλ μκ°νμ§ λͺ»νλ λ°λ‘μ΄λ€!
X | O | X |
O | X | O |
X | O | X |
μ΄ κ²½μ°λ Xκ° λκ°μ ν μ€μ μ±μ°λ©΄ μ’ λ£λκΈ° λλ¬Έμ λΆκ°λ₯ν κ²½μ°λΌκ³ μκ°νλλ°, κ°μ₯ λ¨Όμ Xλ₯Ό λ λ, κ°μ΄λ° λΆλΆμ λκ³ μμνλ©΄ κ°λ₯ν μΌμ΄μ€μλ€.
μ΄ μΈμ λ§μ‘±νλ μ€μ΄ μ¬λ¬ μ€μ΄κ±°λ μλ κ²½μ°μ Falseλ₯Ό 리ν΄νλ€.
'μκ³ λ¦¬μ¦ > ꡬν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 22251 π₯] λΉλ° νΈμ (0) | 2023.08.11 |
---|---|
[λ°±μ€ 7490 π₯] 0 λ§λ€κΈ° (0) | 2023.08.11 |
[λ°±μ€ 14719 π₯] λΉλ¬Ό (0) | 2023.08.01 |
[λ°±μ€ 8911 π₯] κ±°λΆμ΄ (0) | 2023.07.31 |
[λ°±μ€ 18428 π₯] κ°μ νΌνκΈ° (0) | 2023.07.06 |