프로그래머스
[프로그래머스][Kotlin]혼자서 하는 틱택토
끝까지 처음처럼
2023. 2. 27. 17:14
728x90
해당 문제는 옳지 않은 케이스에 대한 구분법만 잘 생각한다면 쉽게 구현 및 작성 할 수 있는 문제였습니다.
첫번째 오류로는 x가 o보다 많은 경우
두번째 오류로는 o의 갯수가 x의 갯수보다 2개 이상 많은 경우
세번째 오류로는 o가 이겼으나 x를 추가로 둔 경우
네번째 오류로는 x가 이겼으나 o를 추가로 둔 경우
다섯번째 오류로는 o,x 둘다 이겼을 경우입니다.
해당 케이스를 제외한다면 나머지는 모두 옳은 케이스라고 할 수 있습니다.
저의 경우 다섯번재 오류를 처음에 생각하지 못하여 몇번의 실패를 맛보았으나 손으로 그려보면서 해당 오류를 찾아 코드를 수정하여 작성하였더니 통과하였었습니다.
하기는 작성한 코드와 실행 결과 입니다.
class Solution {
fun solution(board: Array<String>): Int {
var answer: Int = 1
var oCount = 0
var xCount = 0
board.forEach{
val check = it.toCharArray()
check.forEach{
if(it == 'O') oCount++
if(it == 'X') xCount++
}
}
if(oCount < xCount){
answer = 0
} else if(oCount - xCount > 1){
answer = 0
} else if(xWin(board) && oWin(board)){
answer = 0
} else if(xWin(board) && (xCount < oCount)){
answer = 0
} else if(oWin(board) && (xCount == oCount)){
answer = 0
}
return answer
}
fun xWin(board: Array<String>): Boolean{
//가로 완성이 되어있는지 확인
var check1 = false
for(i in 0 .. board.size-1){
if(board[i] == "XXX"){
check1 = true
break
}
}
if(check1) return check1
else {
//세로 완성이 되어있는지 확인
var check2 = false
var one = ""
var two = ""
var three = ""
for(i in 0 .. board.size-1){
one += board[i][0]
two += board[i][1]
three += board[i][2]
}
if(one == "XXX"){
check2 = true
}
if(two == "XXX"){
check2 = true
}
if(three == "XXX"){
check2 = true
}
if(check2) return check2
else {
//대각선으로 완성이 되어있는지 확인
var check3 = false
var count = 0
var temp = ""
for(i in 0 .. board.size-1){
temp += board[i][count]
count++
}
if(temp == "XXX"){
check3 = true
}
if(check3) return check3
else{
// 반대 대각선 체크
var count = 2
var temp = ""
for(i in 0 .. board.size-1){
temp += board[i][count]
count--
}
if(temp == "XXX"){
check3 = true
}
if(check3) return check3
}
}
}
return false
}
fun oWin(board: Array<String>): Boolean{
//가로 완성이 되어있는지 확인
var check1 = false
for(i in 0 .. board.size-1){
if(board[i] == "OOO"){
check1 = true
break
}
}
if(check1) return check1
else {
//세로 완성이 되어있는지 확인
var check2 = false
var one = ""
var two = ""
var three = ""
for(i in 0 .. board.size-1){
one += board[i][0]
two += board[i][1]
three += board[i][2]
}
if(one == "OOO"){
check2 = true
}
if(two == "OOO"){
check2 = true
}
if(three == "OOO"){
check2 = true
}
if(check2) return check2
else {
//대각선으로 완성이 되어있는지 확인
var check3 = false
var count = 0
var temp = ""
for(i in 0 .. board.size-1){
temp += board[i][count]
count++
}
if(temp == "OOO"){
check3 = true
}
if(check3) return check3
else{
// 반대 대각선 체크
var count = 2
var temp = ""
for(i in 0 .. board.size-1){
temp += board[i][count]
count--
}
if(temp == "OOO"){
check3 = true
}
if(check3) return check3
}
}
}
return false
}
}
테스트 1 〉 | 통과 (19.03ms, 59.4MB) |
테스트 2 〉 | 통과 (0.04ms, 62.5MB) |
테스트 3 〉 | 통과 (18.88ms, 59.9MB) |
테스트 4 〉 | 통과 (28.45ms, 60.3MB) |
테스트 5 〉 | 통과 (0.02ms, 62MB) |
테스트 6 〉 | 통과 (15.40ms, 60.6MB) |
테스트 7 〉 | 통과 (12.02ms, 59.6MB) |
테스트 8 〉 | 통과 (13.38ms, 59.6MB) |
테스트 9 〉 | 통과 (0.03ms, 61.9MB) |
테스트 10 〉 | 통과 (0.03ms, 61.5MB) |
테스트 11 〉 | 통과 (18.92ms, 60.7MB) |
테스트 12 〉 | 통과 (19.03ms, 59.9MB) |
테스트 13 〉 | 통과 (18.74ms, 60.9MB) |
테스트 14 〉 | 통과 (13.17ms, 60.4MB) |
테스트 15 〉 | 통과 (12.31ms, 62MB) |
테스트 16 〉 | 통과 (0.03ms, 59.9MB) |
테스트 17 〉 | 통과 (14.95ms, 59.3MB) |
테스트 18 〉 | 통과 (0.02ms, 59.5MB) |
테스트 19 〉 | 통과 (13.93ms, 61.4MB) |
테스트 20 〉 | 통과 (14.49ms, 61MB) |
테스트 21 〉 | 통과 (14.92ms, 62MB) |
테스트 22 〉 | 통과 (12.47ms, 61.8MB) |
테스트 23 〉 | 통과 (12.49ms, 59.8MB) |
테스트 24 〉 | 통과 (13.84ms, 59.8MB) |
테스트 25 〉 | 통과 (18.76ms, 60.7MB) |
테스트 26 〉 | 통과 (14.53ms, 60.2MB) |
테스트 27 〉 | 통과 (0.03ms, 60MB) |
테스트 28 〉 | 통과 (16.49ms, 60.5MB) |
테스트 29 〉 | 통과 (14.21ms, 60.2MB) |
테스트 30 〉 | 통과 (11.96ms, 61.7MB) |
테스트 31 〉 | 통과 (12.74ms, 62.3MB) |
테스트 32 〉 | 통과 (12.85ms, 59.5MB) |
테스트 33 〉 | 통과 (13.37ms, 60.3MB) |
테스트 34 〉 | 통과 (14.05ms, 59.5MB) |
테스트 35 〉 | 통과 (16.35ms, 59.1MB) |
테스트 36 〉 | 통과 (16.80ms, 59.7MB) |
테스트 37 〉 | 통과 (0.02ms, 60.7MB) |
테스트 38 〉 | 통과 (15.09ms, 60.4MB) |
테스트 39 〉 | 통과 (16.17ms, 61.2MB) |
테스트 40 〉 | 통과 (0.03ms, 61.8MB) |
테스트 41 〉 | 통과 (14.19ms, 60.6MB) |
테스트 42 〉 | 통과 (13.49ms, 59.4MB) |
테스트 43 〉 | 통과 (13.54ms, 62.1MB) |
테스트 44 〉 | 통과 (0.02ms, 62MB) |
테스트 45 〉 | 통과 (13.01ms, 61.1MB) |
테스트 46 〉 | 통과 (11.56ms, 59.6MB) |
테스트 47 〉 | 통과 (13.12ms, 59.7MB) |
테스트 48 〉 | 통과 (17.94ms, 60.1MB) |
테스트 49 〉 | 통과 (14.65ms, 60.9MB) |
테스트 50 〉 | 통과 (0.02ms, 59.8MB) |
테스트 51 〉 | 통과 (19.37ms, 59.3MB) |
테스트 52 〉 | 통과 (18.01ms, 60.4MB) |
테스트 53 〉 | 통과 (0.03ms, 63.2MB) |
테스트 54 〉 | 통과 (0.02ms, 62.2MB) |