For Programmer
백준 14453번 파이썬 문제풀이(Hoof, Paper, Scissors (Silver)) 본문
728x90
N이 10만이라 사실상 누적합으로 풀어야하는 문제이다.
처음에 문제 접근 방식을 어떻게 해야하는지 계속고민하다 결국 힌트를 얻었다.
우선 P ,H , S를 냈을때 이기는 횟수를 구해 이를 누적합으로 저장해놓는다.
그후 인덱스를 다시돌면서 각각의 인덱스마다 다른걸 냈을때의 이기는 횟수를 구해 가장 큰값을 구해주는 식으로 했다.(즉, 지금이 P를 기준으로 3번째 인덱스라면 2번째까지 P가 이기는 횟수 + 3번째 인덱스부터 마지막까지 H로바꿧을때의 이기는 횟수) 와 같은식으로 각각의 6번의 모든 상황을 구해 가장 큰값을 구해주었다.
# H > S, S > P, P > H
import sys
input = sys.stdin.readline
N = int(input().rstrip())
H = [0] * (N + 1)
P = [0] * (N + 1)
S = [0] * (N + 1)
array = [0]
for i in range(N):
array.append(input().rstrip())
for i in range(1, N + 1):
if array[i] == 'H':
H[i] = H[i - 1] + 1
P[i] = P[i - 1]
S[i] = S[i - 1]
elif array[i] == 'P':
H[i] = H[i - 1]
P[i] = P[i - 1] + 1
S[i] = S[i - 1]
elif array[i] == 'S':
H[i] = H[i - 1]
P[i] = P[i - 1]
S[i] = S[i - 1] + 1
result = 0
for i in range(1, N + 1):
p_h = P[i - 1] + (H[N] - H[i - 1])
p_s = P[i - 1] + (S[N] - S[i - 1])
h_s = H[i - 1] + (S[N] - S[i - 1])
h_p = H[i - 1] + (P[N] - P[i - 1])
s_p = S[i - 1] + (P[N] - P[i - 1])
s_h = S[i - 1] + (H[N] - H[i - 1])
result = max(result, p_h, p_s, h_s, h_p, s_p, s_h)
print(result)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 2015번 파이썬 문제풀이(수들의 합 4) (0) | 2022.03.28 |
---|---|
백준 14846번 파이썬 문제풀이(직사각형과 쿼리) (0) | 2022.03.28 |
백준 11660번 파이썬 문제풀이(구간 합 구하기 5) (0) | 2022.03.27 |
백준 11659번 파이썬 문제풀이(구간 합 구하기 4) (0) | 2022.03.27 |
백준 2250번 파이썬 문제풀이(트리의 높이와 너비) (0) | 2022.03.25 |
Comments