본문 바로가기

알고리즘/Baekjoon

[BOJ] 27210 신을 모시는 사당 Python

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

 

27210번: 신을 모시는 사당

칠할 수 있는 돌상의 개수에 제한은 없으며, 반드시 연속한(인접한) 돌상들만 칠할 수 있음(띄엄띄엄 칠할 수 없음)에 유의하라.

www.acmicpc.net

신을 모시는 사당 

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 512 MB 986 429 313 41.789%

문제

신을 모시는 사당에는 신을 조각한 돌상 N개가 일렬로 놓여 있다. 각 돌상은 왼쪽 또는 오른쪽을 바라보고 서있다. 창영이는 연속한 몇 개의 돌상에 금칠을 하여 궁극의 깨달음을 얻고자 한다.

궁극의 깨달음을 얻기 위해서는 가능한 한 많은 금색 돌상들이 같은 방향을 바라보아야 한다. 방향이 다른 돌상은 깨달음에 치명적이다. 깨달음의 양은 아래와 같이 정의된다.

| (왼쪽을 바라보는 금색 돌상의 개수) - (오른쪽을 바라보는 금색 돌상의 개수) |

창영이는 궁극의 깨달음을 얻을 수 있을까?

입력

첫째 줄에 돌상의 개수 N이 주어진다.

둘째 줄에 돌상이 나열된 순서대로, 각 돌상이 바라보고 있는 방향이 주어진다. 입력의 편의상 왼쪽은 1, 오른쪽은 2라고 하자.

출력

최대한 많은 깨달음을 얻기 위해 금을 칠하였을 때, 얻을 수 있는 깨달음의 양을 출력한다.

제한

  • 1 ≤ N ≤ 100,000

풀이 코드 (정답 참고)

import sys
input = sys.stdin.readline

n = int(input())
stones = list(map(int, input().split()))

cnt = 0
maximum = -1e9
l = 0
r = 0
for i in stones:
    if i == 1:
        l += 1
        r -= 1
    else:
        r += 1
        l -= 1
    if l <= 0:
        l = 0
    if r <= 0:
        r = 0
    maximum = max(l, r , maximum)
print(maximum)

 

왼쪽, 오른쪽 카운팅으 다르게 해줘야 한다는 것

음수가 될 때는 다시 0으로 초기화

 

이 두 포인트를 생각하지 못했다.

 

문제 다시 읽고 복습하기 .. 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[BOJ] 2156 포도주 시식 Python  (0) 2023.03.28
[BOJ] 1911 흙길 보수하기 Python  (0) 2023.03.23
[BOJ] 16918 붐버맨 Python  (0) 2023.03.22
[BOJ] 1189 컴백홈 Python  (0) 2023.03.22
[BOJ] 10655 마라톤 1 Python  (0) 2023.02.18