RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚
Algorithm/프로그래머스

[프로그래머스 > Lv2] 혼자서 하는 틱택토

Algorithm/프로그래머스

[프로그래머스 > Lv2] 혼자서 하는 틱택토

2023. 3. 3. 14:11
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제

선공이 'O', 후공이 'X'이며 번갈아 가면서 표시하는 게임을 진행하고 있습니다.

현재 게임판의 상태가 주어질 때, 해당 게임판 상태가 가능한지 여부를 확인해보자

 

[입력]

틱택토 게임판의 정보를 담고 있는 문자열 배열 board

 

[출력]

가능한 게임판 상태이면 1을 아니라면 0을 return

 

2. 풀이

현 상태가 가능한지 판단하는 조건을 잘 구별하면 풀 수 있는 문제입니다.

 

2.1 O과 X의 개수

문제를 보면 O이 먼저 시작하고 그 이후에 X를 두어야 하므로 O의 개수는 반드시 X와 같거나 1 커야 합니다.

이를 코드로 표현하면

first, second = 0, 0 # 선공개수, 후공개수

for x in range(3):
    for y in range(3):
        if board[x][y] == 'O': first+=1
        elif board[x][y] == 'X': second+=1

if first != second and first != second+1: return 0
if first == 0 and second == 0: return 1
🌹 입출력 예제 4번 처럼 O과 X가 모두 없을 때에는 반드시 가능하므로 1을 반환해주어아 합니다.

 

2.2 O가 이긴 상황일 때

O가 가로, 세로, 대각선 중 이미 3개를 모두 채운 경우에는 어떨때 불가능한 경우일까요?

O가 이긴 상황에서 X는 새로운 칸을 채울 수 없습니다. 따라서 O가 이겼을 때는 X의 개수가 O보다 크거나 같으면 안 됩니다.

# count_O는 하나의 가로,세로,대각선에서 O의 개수
if count_O == 3 and first <= second: return 0

 

2.3 X가 이긴 상황일 때

X가 가로, 세로, 대각선 중 이미 3개를 모두 채운 경우에는 O와 비슷하게 O의 개수가 X의 개수와 같아야 합니다.

X가 이긴 상황에서 O는 새로운 칸을 채울 수 없기 때문입니다.

# count_X는 하나의 가로, 세로, 대각선에서의 X의 개수
if count_X == 3 and first > second: return 0

 

위 3가지 경우를 코드롤 구현하면 아래와 같습니다. 🤗

3. 코드

Python
def solution(board):
    first, second = 0, 0 # 선공개수, 후공개수
    
    for x in range(3):
        for y in range(3):
            if board[x][y] == 'O': first+=1
            elif board[x][y] == 'X': second+=1
    
    if first != second and first != second+1: return 0
    if first == 0 and second == 0: return 1
    
    # row
    for x in range(3):
        count_O, count_X = 0, 0
        for y in range(3):
            if board[x][y] == 'O': count_O+=1
            elif board[x][y] == 'X': count_X+=1
        if count_O == 3 and first <= second: return 0
        if count_X == 3 and first > second: return 0

    # Column
    for x in range(3):
        count_O, count_X = 0, 0
        for y in range(3):
            if board[y][x] == 'O': count_O+=1
            elif board[y][x] == 'X': count_X+=1
        if count_O == 3 and first <= second: return 0
        if count_X == 3 and first > second: return 0
    
    # Dia
    count_O, count_X = 0, 0
    for x in range(3):
        if board[x][x] == 'O': count_O+=1
        elif board[x][x] == 'X': count_X+=1
    if count_O == 3 and first <= second: return 0
    if count_X == 3 and first > second: return 0

    count_O, count_X = 0, 0
    for x in range(3):
        if board[x][-x-1] == 'O': count_O+=1
        elif board[x][-x-1] == 'X': count_X+=1
    if count_O == 3 and first <= second: return 0
    if count_X == 3 and first > second: return 0

    return 1

 

 

반응형

'Algorithm > 프로그래머스' 카테고리의 다른 글

[프로그래머스 > Lv1] 대충 만든 자판  (0) 2023.03.04
[프로그래머스 > Lv2] 덧칠하기  (0) 2023.03.04
[프로그래머스 > Lv2] 미로탈출  (0) 2023.02.16
[프로그래머스 > Lv1] 카드뭉치  (0) 2023.02.16
[프로그래머스 > Lv3] 표현 가능한 이진트리  (0) 2023.02.10
  • 1. 문제
  • 2. 풀이
  • 3. 코드
'Algorithm/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 > Lv1] 대충 만든 자판
  • [프로그래머스 > Lv2] 덧칠하기
  • [프로그래머스 > Lv2] 미로탈출
  • [프로그래머스 > Lv1] 카드뭉치
RIEN😚
RIEN😚
안드로이드 / 코틀린 독학으로 취업하자!

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.