Computer Science/Algorithm

BOJ 3085: 사탕 게임

무니화니 2022. 1. 6. 23:07

이제 지겨운 DP를 끝내고, 더욱 재밌어보이는(?) 브루트포스를 풀고 있다.

근데 어렵다...... 특히 구현하는 문제가 난이도가 높아보인다.

BOJ 3085: 사탕 게임

진짜 역대급이다. 왜이렇게 배열을 떠올리면서 문제를 푸는 것이 어려운지....

다른 사람들의 코드를 보고 정리해서 써봤다.

def check(arr):
  n=len(arr)
  answer=1
  for i in range(n):
    count=1
    for j in range(1,n):
      if arr[i][j]==arr[i][j-1]:
        count+=1
      else:
        count=1
      if count>answer:
        answer=count
    count=1
    for j in range(1,n):
      if arr[j][i]==arr[j-1][i]:
        count+=1
      else:
        count=1
      if count>answer:
        answer=count
  return answer
n=int(input())
answer=0
candies=['0' for _ in range(n)]
for i in range(n):
  candies[i]=[x for x in input()]
for i in range(n):
  for j in range(n):
    if j+1<n:
      candies[i][j],candies[i][j+1]=candies[i][j+1],candies[i][j]
      number=check(candies)
      if number>answer:
        answer=number
      candies[i][j],candies[i][j+1]=candies[i][j+1],candies[i][j]
    if i+1<n:
      candies[i][j],candies[i+1][j]=candies[i+1][j],candies[i][j]
      number=check(candies)
      if number>answer:
        answer=number
      candies[i][j], candies[i+1][j] = candies[i+1][j],candies[i][j]
print(answer)

아니... 이게 뭘까? 싶을 수 밖에 없다.

 

여기서 check라는 함수는 한 줄에 같은 색이 몇 개 있는지 알 수 있는 코드이다.

check라는 함수에 리스트를 넣기 전에, 먼저 한 칸 한 칸 바꿔보고, 그리고 check에 넣는다.

check에서 행과 열에 따라서 몇 개의 수가 있는지를 알려주고, 전에 나왔던 값보다 크면 최신화한다.

 

어렵다..... 노력을 훨씬 많이 해야 함을 느낀다.

 

'Computer Science > Algorithm' 카테고리의 다른 글

BOJ 15469: N과 M (1)  (0) 2022.02.05
BOJ 6064: 카잉 달력  (0) 2022.01.07
BOJ 1932: 정수 삼각형  (0) 2022.01.06
BOJ 2156: 포도주 시식  (0) 2022.01.05
BOJ 11057: 오르막 수 (+중복조합 야매)  (0) 2022.01.04