일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 삼성
- 싸피 13기
- 파이썬
- 백준
- 코딩테스트
- 싸피
- SWEA
- 삼성 부트캠프
- 비전공자
- dfs
- 디자인패턴
- 우테코
- 정보처리기사
- 코딩
- UML
- 삼성 청년 SW 아카데미
- 우테코 7기
- 프리코스
- 13기
- 삼성 청년 sw아카데미
- 코테
- 마이스터고
- 개발자
- 부트캠프
- 취뽀
- 우테코 프리코스
- 백준 2003
- 정처기
- SSAFY
- 삼성청년SW아카데미
Archives
- Today
- Total
룰루코딩
백준 2018 수들의 합5 본문
문제
솔루션
n = int(input())
cnt,sum = 0,0
start, end = 0,0
while end<=n:
if sum < n:
end += 1
sum += end
elif sum > n:
sum -= start
start += 1
else:
cnt+=1
end+=1
sum+=end
print(cnt)
깨달은점
오랜만에 푸려니 기억이 잘 안났다.. 투포인터를 사용해서 풀어야하는 문제였다.
cnt,sum = 0,0
start, end = 0,0
- cnt: 연속된 수의 합이 n이 되는 경우의 수를 세는 변수
- sum: 현재 구간에 해당하는 숫자들의 합 저장
- start와 end: 현재 연속된 수열의 시작과 끝 위치를 나타내는 두 포인터
while end<=n:
if sum < n:
end += 1
sum += end
elif sum > n:
sum -= start
start += 1
else:
cnt+=1
end+=1
sum+=end
- while 반복문
- end가 n보다 작거나 같을 동안 반복. (보다 큰 값은 고려할 필요가 없음)
- 현재 합이 n보다 작은 경우
- 구간의 길이를 늘려야 함 -> end를 오른쪽으로 한 칸 이동, 새로운 end 값을 합에 더함
- 현재 합이 n보다 큰 경우
- 구간의 합을 줄여야 함 -> 구간의 가장 왼쪽에 있는 값(start)을 뺌, start를 오른쪽으로 한 칸 이동
- 현재 합이 n과 같은 경우
- 한 가지 경우를 찾은 것 -> cnt 1 증가
- 다음 경우의 수도 탐색하기 위해 end를 오른쪽으로 한 칸 이동시키며 해당 값을 sum에 더함
'백준' 카테고리의 다른 글
백준 2003 수들의 합 2 (0) | 2025.04.24 |
---|---|
백준 1931 회의실 배정 (1) | 2025.01.21 |
18870 좌표 압축 (0) | 2025.01.20 |
백준 9461 파도반수열 (1) | 2025.01.18 |
백준 1212 1373 1252 1550 11005 13877 3460 진수 관련 문제 (0) | 2025.01.07 |