Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 18108
- safari world
- 10430
- 25083
- debugSymbolLevel
- 디버그심볼
- 새싹
- 백준1476
- PreferenceManager
- 2525
- dp
- 사파리 월드
- 기본메신저
- kotlin
- Class Delegation
- 브루트포스
- Counting The number
- 코틀린
- 10807
- 백준3085
- Android
- BitMasking
- 10926
- 1330
- 백준1107
- baekjoon
- 백준
- 꼬마 정민
- 개수 세기
Archives
- Today
- Total
세상을 더 좋게
[백준] 3085 '사탕 게임' 파이썬(python) 본문
https://www.acmicpc.net/problem/3085
3085번: 사탕 게임
예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.
www.acmicpc.net
import sys
input = sys.stdin.readline
def check(arr):
n = len(arr)
answer = 1
for i in range(n):
# 열 체크
cnt=1
for j in range(1, n):
if arr[i][j] == arr[i][j-1]:
cnt +=1
else:
cnt = 1
if cnt > answer:
answer = cnt
# 행 체크
cnt = 1
for j in range(1, n):
if arr[j][i] == arr[j-1][i]:
cnt +=1
else:
cnt = 1
if cnt > answer:
answer = cnt
return answer
n = int(input())
arr = [list(input()) for _ in range(n)]
answer = 0
for i in range(n):
for j in range(n):
# 열 바꾸기
if j+1 < n:
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j]
temp = check(arr)
if temp > answer:
answer = temp
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j]
# 행 바꾸기
if i+1 < n:
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
temp = check(arr)
if temp > answer:
answer = temp
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
print(answer)
Point
- 문제가 다소 복잡하게 보일 수도 있지만 간단하다. 위아래 혹은 좌우로 사탕을 바꿔서 일직선이 가장 길게 나오는 것의 숫자를 찾는 것이다.(애니팡 같은 느낌)
- 이는 어찌되었든 하나하나 일일이 찾는 것밖에 없기 때문에 for문을 그냥 일방적으로 돌리는 브루트 포스를 사용한다.
- check라는 함수를 만들고, 해당 함수는 줄을 읽어 최대 몇개가 연속되어 있는지 체크하는 역할을 한다. 한 마디로 우리의 눈 역할
- 이제 for문을 이용하여 행을 하나하나 바꿔서 check 함수를 적용하고, 또 열을 하나하나 바꿔서 check 함수를 적용한다.
- 이중 가장 많이 연속된 사탕이 있으면 그 것을 answer라는 변수에 담고 마지막에 이것을 출력한다.
- 아직까지 2차원 list를 읽고 그것을 활용하는 것에 있어서 처음에는 낯설고 버벅거리게 된다. 하지만 하나하나 이해하는 것이 아닌 전체적인 윤곽으로서 확인해보고, 자꾸 보다보니 점점 익숙해져가고 있다.
'Algorithm > 브루트 포스' 카테고리의 다른 글
[백준] 1107 '리모컨' 파이썬(python) (0) | 2022.01.15 |
---|---|
[백준] 1476 '날짜 계산' 파이썬(python) (0) | 2022.01.14 |
[백준] 2309 '일곱 난쟁이' 파이썬(python) (0) | 2022.01.12 |