-
[프로그래머스][Kotlin]혼자서 하는 틱택토프로그래머스 2023. 2. 27. 17:14728x90
해당 문제는 옳지 않은 케이스에 대한 구분법만 잘 생각한다면 쉽게 구현 및 작성 할 수 있는 문제였습니다.
첫번째 오류로는 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) '프로그래머스' 카테고리의 다른 글
[프로그래머스][Kotlin] 바탕화면 정리 (0) 2023.03.03 [프로그래머스][Kotlin][이분탐색]입국심사 (0) 2023.02.28 [프로그래머스][Kotlin]대충 만든 자판 (0) 2023.02.26 [프로그래머스][Kotlin] 롤케이크 자르기 (0) 2023.02.20 [프로그래머스][Kotlin] 카드 뭉치 (0) 2023.02.17