본문 바로가기

알고리즘/백준 문제풀이

백준 - 3085(사탕 게임, 파이썬)

728x90

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

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

www.acmicpc.net

문제 접근

  • 완전탐색으로 하나씩 교환해주며 개수를 센다.
  • 상하좌우 다 교환할 필요없이 오른쪽과 아래쪽만 교환하면 된다. 
# 로직은 맞는데 구현을 실패함
# 다른사람이 구현한 것 참조

import sys
input = sys.stdin.readline

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

# 행렬을 검사하여 최대값을 갱신하는 함수
def check():
    global maxCnt
    for i in range(n):
        # 행을 검사
        cnt = 1 
        for j in range(1, n):
            if board[i][j] == board[i][j-1]:
                cnt += 1
                maxCnt = max(cnt, maxCnt)
            else:
                cnt = 1
        
        cnt = 1
        # 열을 검사
        for j in range(1, n):
            if board[j][i] == board[j-1][i]:
                cnt += 1
                maxCnt = max(cnt, maxCnt)
            else:
                cnt = 1


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()
            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]
            check()
            board[i][j], board[i+1][j] = board[i+1][j], board[i][j]

print(maxCnt)

느낀점

  • 내 구현력이 왜이리 안좋나했는데 매번 구현이 좀만 안되어도 다른사람풀이를 본다..
  • 직접 구현하려고 노력하는 습관들이자

코드 출저

https://kbwplace.tistory.com/130

 

[Python/파이썬] 백준 알고리즘 3085 - 사탕 게임 (Brute Force)

""" 1. 아이디어 브루트포스로 다 돌려본다. N이 최대 50이므로 가능하다. 한 위치에서 상하좌우와 바꿀 수 있지만 겹치므로 아래와 오른쪽만 계속해서 바꿔주면 된다. 바꿔준 뒤, 전체 보드에서

kbwplace.tistory.com