[백준] 3085: 사탕 게임 (Python)

JiKwang Jeong·2021년 10월 31일
0
post-custom-banner

문제📖

풀이🙏

  • 2차원 리스트에서 가장 긴 연속부분을 찾는 메소드 check(list)를 정의한다.
  • check 메소드는 가장 긴 연속부분의 값을 출력한다.
  • data[i][j], data[i][j+1] = data[i][j+1], data[i][j],
    data[i][j], data[i+1][j] = data[i+1][j], data[i][j]를 통하여 상하좌우 (인접한 요소)를 서로 바꾸고 그 때마다 가장 긴 연속부분의 값을 찾아서 가장 긴 연속부분을 가진 값을 출력한다.

코드💻

## 가장 긴 연속부분을 찾는 메소드
def check(data):
    result = 1
    for i in range(len(data)):
        cnt = 1
        for j in range(1, n):
        	# 좌우가 같으면 cnt 증가
            if data[i][j] == data[i][j-1]:
                cnt += 1
            else:
                cnt = 1
            # cnt가 현재까지 제일 긴 result보다 길면 result를 갱신
            if cnt > result:
                result = cnt
        cnt = 1
        for j in range(1, n):
        	# 상하가 같으면 cnt 증가
            if data[j][i] == data[j-1][i]:
                cnt += 1
            else:
                cnt = 1
            # cnt가 현재까지 제일 긴 result보다 길면 result를 갱신
            if cnt > result:
                result = cnt
    
    return result
        
n = int(input())
data = []
result = 0
for i in range(n):
    data.append(list(input()))

for i in range(n):
    for j in range(n):
        if j < n-1:
            data[i][j], data[i][j+1] = data[i][j+1], data[i][j] # 좌우
            cnt = check(data)
            if cnt >= result:
                result = cnt
            data[i][j], data[i][j+1] = data[i][j+1], data[i][j] # 원위치
        if i < n-1:
            data[i][j], data[i+1][j] = data[i+1][j], data[i][j] # 상하
            cnt = check(data)
            if cnt >= result:
                result = cnt
            data[i][j], data[i+1][j] = data[i+1][j], data[i][j] # 원위치
            
print(result)
profile
기억보다 기록, 난리보다 정리
post-custom-banner

0개의 댓글