오답
from collections import deque
n,x = map(int,input().split())
visited = list(map(int,input().split()))
visited = deque(visited)
days = 0
res = []
while visited:
if len(visited) < x:
break
sumQ = 0
for i in range(x):
sumQ += visited[i]
visited.popleft()
res.append(sumQ)
if sum(res) == 0:
print("SAD")
else:
print(max(res))
print(res.count(max(res)))
- 초기 아이디어로는 q로 해당 방문자 수를 담아 x만큼 돌고 맨 앞에 부분을 빼주는 식으로 했는데 이런 식으로 진행하면 더했던 값을 계속 다시 더하고 더해주어야 (중간에 껴있는 값들) 하기 때문에 시간 초과가 났다.
- 이를 해결하기 위해서는 투포인터의 기본적 개념인 해당 조건을 충족했다면 맨 앞에 값만 빼고 맨 뒤에 값만 다시 넣어서 값을 찾아가는 방식을 사용해 문제를 풀어야 한다.
n,x = map(int,input().split())
visited = list(map(int,input().split()))
cnt = 0
res = 0
left = 0
right = 1
sum_days = visited[left]
while left <= right:
if len(visited[left:]) < x:
break
if right - left >= x:
if sum_days == res:
cnt += 1
if sum_days > res:
cnt = 1
res = sum_days
left += 1
sum_days -= visited[left]
else:
sum_days += visited[right]
right += 1
if res == 0:
print("SAD")
else:
print(res)
print(cnt)
정답
n,x = map(int,input().split())
visited = list(map(int,input().split()))
if sum(visited) == 0:
print("SAD")
else:
sum_data = sum(visited[:x])
max_sum = sum_data
max_cnt = 1
for i in range(x, n):
sum_data += visited[i]
sum_data -= visited[i-x]
if sum_data > max_sum:
max_sum = sum_data
max_cnt = 1
elif sum_data == max_sum:
max_cnt += 1
print(max_sum)
print(max_cnt)
n,x = map(int,input().split())
visited = list(map(int,input().split()))
cnt = 1
SUM = sum(visited[:x]) #초기값으로 잡고 여기서 시작
MAX = SUM
for i in range(x,n):
SUM += visited[i]
SUM -= visited[i - x]
if MAX < SUM:
MAX = SUM
cnt = 1
elif MAX == SUM:
cnt += 1
if MAX == 0:
print("SAD")
else:
print(MAX)
print(cnt)
풀이
- 해당 x까지를 초기값으로 잡아 더해주고 앞에서는 하나 빼주고 뒤에서 하나 더해줘 값을 비교하는 방식으로 진행한다.
- 이때 최대값이 변경될 땐 cnt 값을 1로 초기화해준다.
- 최대값이 현재 다 더한 값과 같다면 cnt를 1만큼 증가시켜준다
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][두 포인터] - 7795. 먹을 것인가 먹힐 것인가 (0) | 2022.09.27 |
---|---|
[백준][수학] - 3029. 경고 (0) | 2022.09.27 |
[백준][투포인터] - 11728. 배열 합치기 (0) | 2022.09.07 |
[백준][큐] - 1158. 요세푸스 문제 (0) | 2022.09.06 |
[백준][투포인터] - 20922. 겹치는 건 싫어 (0) | 2022.08.15 |