2022. 11. 16. 17:16ใAlgorithm
๋ฐฑ์ค - ํฑํํ (Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/7682
๋์ ํ์ด
๋ฌธ์ ๋ฅผ ๋ณด๊ณ 3x3๊ฒฉ์ํ์ด๋ผ๊ณ ํด์ ์ ๋ ฅ๊ฐ์์ 3x3ํํ๋ก ๋ณด๋ ๊ฑด๊ฐ? ์ถ์๋๋ฐ ํ์ค๋ก ๋ฐ๋ ๊ฒ์ด์๋ค.
์๊ฐํด๋ณด๋ฉด ํ์ค๋ง๋ค valid์ฌ๋ถ๊ฐ ์๋๋ฐ ๊ทธ๊ฑธ ๋ณด๊ณ ๋นจ๋ฆฌ ํ๋จํ์ด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ ์ต์ข ์ํ์ธ์ง๋ฅผ ํ๋ณํ๋ ๊ฒ์ด๋ค.
์ฆ ์ฃผ์ด์ง ํฑํํ ๋ X๋ O๊ฐ ์ด๊ธด์ํ๋ก ์ผ์ฐ ๋๋๊ฑฐ๋, ๋น๊ธด์ํ๋ก X๊ฐ 5, O๊ฐ 4์ผ๋์ ๊ฒฝ์ฐ๋ง Valid๊ฐ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ X๊ฐ ์ด๊ฒผ์๋, O๊ฐ ์ด๊ฒผ์๋, ๋น๊ฒผ์ ๋์ธ์ง๋ง ํ๋จํ๋ฉด ๋๋ค.
๋จผ์ X๊ฐ ์ด๊ฒผ์๋๋ X๊ฐ ๋จผ์ ๋์๊ธฐ ๋๋ฌธ์ O๋ณด๋ค 1์ด ๋ง์ผ๋ฉด์ X๋ก ํ์ค์ ๋ง๋ค๊ณ O๋ก ํ์ค์ ๋ชป๋ง๋ค์ด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ O๊ฐ ์ด๊ฒผ์๋๋ O๊ฐ ๋ค์ ๋์์ง๊ธฐ ๋๋ฌธ์ X์ O์ ๊ฐ์๊ฐ ๊ฐ์์ง๋์ด๋ฉด์ X๋ ํ์ค์ ๋ชป๋ง๋ค๊ณ O๋ ํ์ค์ ๋ง๋๋ ์ํ์ด๋ค.
๋ง์ง๋ง์ผ๋ก ๋น๊ฒผ์๋๋ ๊ฒ์์ด ๋๋์ํ๋ก X๊ฐ O๋ณด๋ค 1๋ง์ ์ํ์ด๋ค.
์ด๋ฅผ ์ํด checkํจ์๋ฅผ ๋ง๋ค์ด์ ํ์ค์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ ์ ์๋๋ก ํ๋ค.
import Foundation
func checkOWin(_ map:[[String]]) -> Bool {
for i in 0..<3 { // ๊ฐ๋ก, ์ธ๋ก์ ํ ์ค์ด ์์ฑ๋๋ฉด
if map[i][0] == "O", map[i][0] == map[i][1], map[i][1] == map[i][2] { return true }
if map[0][i] == "O", map[0][i] == map[1][i], map[1][i] == map[2][i] { return true }
}
// ๋๊ฐ์ ์ฐ์ธก๋ฐฉํฅ์ ํ์ค์ด ์์ฑ๋๋ฉด
if map[0][0] == "O", map[0][0] == map[1][1], map[1][1] == map[2][2] {
return true
}
// ๋๊ฐ์ ์ข์ธก๋ฐฉํฅ์ ํ์ค์ด ์์ฑ๋๋ฉด
if map[0][2] == "O", map[0][2] == map[1][1], map[1][1] == map[2][0] {
return true
}
return false
}
func checkXWin(_ map:[[String]]) -> Bool {
for i in 0..<3 {
if map[i][0] == "X", map[i][0] == map[i][1], map[i][1] == map[i][2] { return true }
if map[0][i] == "X", map[0][i] == map[1][i], map[1][i] == map[2][i] { return true }
}
if map[0][0] == "X", map[0][0] == map[1][1], map[1][1] == map[2][2] {
return true
}
if map[0][2] == "X", map[0][2] == map[1][1], map[1][1] == map[2][0] {
return true
}
return false
}
while true {
let input = readLine()!.map{String($0)}
if input[0] == "e" { // end๊ฐ ๋์ค๋ฉด ์ข
๋ฃ
break
}
var map = [[String]](repeating: [String](repeating: ".", count: 3), count: 3)
var oNum = 0
var xNum = 0
for i in 0..<9 {
map[i/3][i%3] = input[i]
if input[i] == "O" { oNum += 1 } else if input[i] == "X" { xNum += 1}
}
let oWin = checkOWin(map)
let xWin = checkXWin(map)
if xWin, !oWin, xNum - oNum == 1 { // X๊ฐ ์ด๊ธธ๋๋ O๋ณด๋ค 1๊ฐ๋ง์ ์ํ
print("valid")
} else if oWin, !xWin, xNum == oNum { // O๊ฐ ์ด๊ธธ๋๋ X์ O์ ๊ฐ์๊ฐ ๊ฐ์์ํ
print("valid")
} else if !oWin, !xWin, xNum == 5, oNum == 4 { // ๋น๊ธธ๋๋ X๊ฐ 5์ด๊ณ , O๊ฐ 4์ธ์ํ
print("valid")
} else { // ๊ทธ ์ธ๋ ๋ถ๊ฐ๋ฅ
print("invalid")
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ์ธ๊ตฌ์ด๋(Swift) (0) | 2022.11.21 |
---|---|
๋ฐฑ์ค - ์นํจ๋ฐฐ๋ฌ(Swift) (0) | 2022.11.18 |
๋ฐฑ์ค - 0 ๋ง๋ค๊ธฐ(Swift) (0) | 2022.11.16 |
๋ฐฑ์ค - ๋น๋ฐํธ์(Swift) (0) | 2022.11.15 |
๋ฐฑ์ค - ๋น๋ฌผ(Swift) (0) | 2022.11.15 |