Algoritm/BOJ

[BOJ] 3085번: 사탕 게임

twoDeveloper 2022. 4. 20. 14:31

■ 문제 풀이

- 행/열의 크기를 리턴하는 함수를 구축 (check)

- 크기 비교 후 제일 큰 값 리턴

- 브루트 포스

■문제 해답

import sys
input = sys.stdin.readline

def check(board):
  n = len(board)
  answer = 1

  for i in range(n):
    # 열
    cnt = 1
    for j in range(1, n):
      if board[i][j] == board[i][j - 1]:
        cnt += 1
      else:
        cnt = 1
      
      # 비교 후 현재 cnt가 더 크다면 answer 갱신
      if cnt > answer:
        answer = cnt
    
    # 행
    cnt = 1
    for j in range(1, n):
      if board[j][i] == board[j - 1][i]:
        cnt += 1
      else:
        cnt = 1
      
      # 비교해서 현재 cnt가 더 크다면 answer 갱신
      if cnt > answer:
        answer = cnt
  return answer


n = int(input())
board = [list(input()) for _ in range(n)]
answer = 0

# n x n 크기
for i in range(n):
  for j in range(n):
    # 행
    if j + 1 < n:
      # 인접한 것과 바꾸기
      board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]

      # check는 arr에서 인접한 것과 바꿧을 때 가장 긴 연속한 부분을 찾아내는 함수
      temp = check(board)

      if temp > answer:
        answer = temp
      
      # 바꿧던 것을 다시 원래대로 돌려놓기
      board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]
    
    # 열
    if i + 1 < n:
      board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]

      temp = check(board)

      if temp > answer:
        answer = temp

      board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]

print(answer)

 

문제 출처 : https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

'Algoritm > BOJ' 카테고리의 다른 글

[BOJ] 1107번: 리모콘  (0) 2022.04.20
[BOJ] 1476번: 날짜 계산  (0) 2022.04.20
[BOJ] 2309번: 일곱 난쟁이  (0) 2022.04.20
[BOJ] 1260번: DFS와 BFS  (0) 2022.04.14
[BOJ] 13023번: ABCDE  (0) 2022.04.14