본문 바로가기

boj

백준 3085 사탕 게임

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

 

3085번: 사탕 게임

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

www.acmicpc.net

 

와 나는 알고리즘생각하느라 잠을못잘뻔했는데

알고보니 그딴거없이 하나씩 다 해보는게 브루트포스였다.

 

먼져, 2차원 보드에서 연속되는 값의 최댓값을 셀 함수 check(board) 를 만든다.

모든 행, 열 을 비교하며 가장 많이 연속되는 값의 개수를 리턴한다..

 

 

메인에서

우리는 굳이 4방향을 다 바꿀 필요 없이, 각 원소의 오른쪽과 아래만 바꾸면 모든 경우를 다 시험 가능하다.

각 행, 열의 마지막 원소는 바꿀 필요 없으므로 예외처리를 한다.

 

먼져, 모든 원소의 오른쪽 원소와 바꿔가며, 그 상태에서의 연속되는 수를 센다.(check)

그 후 바꾼 원소를 제자리에 돌려놓는는다.

 

그 후, 모든 원소의 아래쪽 원소와 바꿔가며, 그 상테에서 연속되는 수를 센다.(check)

그 후 제자리에 놓는다.

 

각각의 check값을 리턴하여, 가장 큰 수를 구하면 된다.

 

1시간정도 계속 코드를 짰는데 계속 틀렸습니다가 나오는 바람에, 너무 화가나서 정답 코드랑 비교해봤더니,

변수이름 하나에 r이 붙어있었다. 그거잡을려고 40분동안 뻘짓한듯 하다.

 

##코드##

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
            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
            if cnt>answer:
                answer=cnt
            

    return answer





    
            


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

real_ans=0
for i in range(n):
    for j in range(n):
        if i+1<n: #i+1에서 오류방지
                    # 오른쪽과 바꿈
            board[i][j],board[i+1][j]=board[i+1][j],board[i][j]
            
            temp=check(board) # 탐색하여 최댓값구함
            if temp>real_ans:
                real_ans=temp #이전최댓값보다 크면 갱신
            
            board[i][j],board[i+1][j]=board[i+1][j],board[i][j]
            #보드 초기화

        if j+1<n: #j+1에서 오류방지
                    #아랫쪽과 바꿈
            board[i][j],board[i][j+1]=board[i][j+1],board[i][j]
            temp=check(board)

            if temp>real_ans: #위와 동일
                real_ans=temp
            real_ans=max(check(board),real_ans)

            board[i][j],board[i][j+1]=board[i][j+1],board[i][j]
            #보드 초기화
        
print(real_ans)

 

 

 

 

 

 

'boj' 카테고리의 다른 글

백준 1107 리모컨  (0) 2022.04.02
백준 1476 날짜 계산  (0) 2022.04.02
백준 1920 수 찾기  (0) 2022.03.31
백준 17404 RGB거리 2  (0) 2022.03.30
백준 13398 연속합 2  (0) 2022.03.29