본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #3085

by 생각하는 이상훈 2023. 3. 9.
728x90

#3085 사탕 게임

import sys
input = sys.stdin.readline

n = int(input())
board = [list(input()) for _ in range(n)]   # 게임판을 세팅할 2차원 배열 board정의
max_count = 0       # 결과를 도출할 최대값 카운터 0으로 초기화

def check():        # 같은 색의 사탕이 있나 체크하는 함수
    global max_count    # max_count값을 전역변수로 선언
    for i in range(n):
        cnt = 1            # 기본적을 연속된 사탕의 수는 1로 초기화
        for j in range(n-1):    # 오른쪽 방향 체크
            if board[i][j]==board[i][j+1]:  # 우측 사탕과 색이 일치하면
                cnt += 1                    # cnt값 1증가
                max_count = max(max_count, cnt) # max_count 즉 최대값을 기존의 최대값과 cnt값을 비교하여 더 큰 값으로 갱신
            else:               # 우측 사탕과 색이 일치하지 않으면
                cnt = 1         # 카운터값 1로 다시 초기화
        cnt = 1            # 기본적을 연속된 사탕의 수는 1로 초기화
        for j in range(n-1):    # 아래 방향 체크
            if board[j][i]==board[j+1][i]:  # 하단 사탕과 색이 일치하면
                cnt += 1                    # cnt값 1증가
                max_count = max(max_count, cnt) # max_count 즉 최대값을 기존의 최대값과 cnt값을 비교하여 더 큰 값으로 갱신
            else:               # 우측 사탕과 색이 일치하지 않으면
                cnt = 1         # 카운터값 1로 다시 초기화

for i in range(n):  # (0,0)좌표부터 좌표 전수조사 
    for j in range(n-1):
        # 만약 입력 받은 좌표의 사탕의 색과 우측의 사탕의 색이 다르다면
        if board[i][j] != board[i][j + 1]:
            board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j] # 좌우 사탕을 바꿈
            check()     # 최대 수 확인
            board[i][j + 1], board[i][j] = board[i][j], board[i][j + 1] # 사탕을 다시 돌려놓음
        # 만약 입력 받은 좌표의 사탕의 색과 하단의 사탕의 색이 다르다면
        if board[j][i] != board[j + 1][i]:
            board[j][i], board[j + 1][i] = board[j + 1][i], board[j][i] # 상하 사탕을 바꿈
            check()     # 최대 수 확인
            board[j + 1][i], board[j][i] = board[j][i], board[j + 1][i] # 사탕을 다시 돌려놓음

            

print(max_count) #색이 같은 사탕개수 최대값을 출력

브루트포스 알고리즘(완전탐색 알고리즘)으로 4중 for문을 거쳐서 처음에는 시간초과가 나지 않을까 했지만 문제가 완전탐색을 의도한 것처럼 숫자 제한이 50까지만 되어있어서 부담없어 코드를 작성하였다.


 

728x90

'Sketch (Programming Language) > Python' 카테고리의 다른 글

Baekjoon Training #2470  (0) 2023.03.14
Baekjoon Training #1062  (1) 2023.03.10
Baekjoon Training #1715  (0) 2023.03.05
Baekjoon Training #11053  (0) 2023.02.24
Baekjoon Training #2606  (0) 2023.02.22