18311번: 왕복
첫째 줄에 정수 N, K가 공백을 기준으로 구분되어 주어진다. (1≤N≤100,000) 단, K는 항상 왕복 거리보다 작은 양의 정수 혹은 0으로 주어진다. 둘째 줄에 1번부터 N번까지 각 코스의 길이가 공백을
www.acmicpc.net
코드
n, k = map(int, input().split())
course = list(map(int, input().split()))
total = sum(course)
if k < total:
tmp = 0
for i in range(n):
if tmp == k:
print(i+1)
break
elif tmp > k:
print(i)
break
tmp += course[i]
else:
k -= total
tmp = 0
for i in range(n-1, -1, -1):
if tmp+course[i] < k:
tmp += course[i]
else:
print(i+1)
break
k가 전체 코스의 길이 합보다 작을 때, 클 때로 나누어서 구한다.
전체 코스의 합보다 k가 작을 때는 코스를 1번부터 tmp에 길이를 더하며 tmp가 k보다 크거나 같아지는 순간을 찾으면 된다. k와 tmp가 같을 때는 다음 코스로 바뀌는 구간이므로 다음 코스의 번호를 출력해주고, k < tmp라면 현재 코스의 번호를 출력해주면 된다.
전체 코스의 합보다 k가 클 때는 마지막 코스에서 반환해서 오는 경우이므로 위의 과정을 거꾸로 해준다고 생각하면 된다.
'문제풀이 > 구현' 카테고리의 다른 글
[Python/파이썬] 백준 20665번 독서실 거리두기 (0) | 2024.05.10 |
---|---|
[Python/파이썬] 백준 2933번 미네랄 (0) | 2024.04.23 |
[Python/파이썬] 백준 21277번 짠돌이 호석 (0) | 2024.04.06 |
[Python/파이썬] 백준 14499번 주사위 굴리기 (1) | 2024.03.31 |
[Python/파이썬] 백준 17281번 ⚾ (0) | 2024.03.30 |