문제
N마리의 새가 나무에 앉아있고, 자연수를 배우기 원한다. 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 어떤 숫자 K를 노래할 때, K마리의 새가 나무에서 하늘을 향해 날아간다. 만약, 현재 나무에 앉아있는 새의 수가 지금 불러야 하는 수 보다 작을 때는, 1부터 게임을 다시 시작한다.
나무에 앉아 있는 새의 수 N이 주어질 때, 하나의 수를 노래하는데 1초가 걸린다고 하면, 모든 새가 날아가기까지 총 몇 초가 걸리는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 새의 수 N이 주어진다. 이 값은 10^9보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
N에서 1부터 K까지 뺄 수 있으면 빼고, 뺄 수 없으면 다시 1부터 빼서 0이 될 때까지 몇 초가 걸리는지 구하는 문제이다.
예제 입출력은 다음과 같다.
CASE | INPUT | OUTPUT |
1 | 14 | 7 |
예제 계산 과정은 다음과 같다.
1. K = 1, 14마리의 새 중 1마리가 날아간다. => 남은 새 : 13마리, 1초
2. K = 2, 13마리의 새 중 2마리가 날아간다. => 남은 새 : 11마리, 2초
3. K = 3, 11마리의 새 중 3마리가 날아간다. => 남은 새 : 8마리, 3초
4. K = 4, 8마리의 새 중 4마리가 날아간다. => 남은 새 : 4마리, 4초
5. K = 5, K보다 남은 새의 수가 작으므로 1부터 다시 시작한다. => 남은 새 : 4마리
6. K = 1, 4마리의 새 중 1마리가 날아간다. => 남은 새 : 3마리, 5초
7. K = 2, 3마리의 새 중 2마리가 날아간다. => 남은 새 : 1마리, 6초
8. K = 3, K보다 남은 새의 수가 작으므로 1부터 다시 시작한다. -> 남은 새 : 1마리
9. K = 1, 1마리의 새 중 1마리가 날아간다. => 남은 새 : 0마리, 7초
따라서 7초가 걸린다.
로직은 다음과 같다.
1. N이 0이 될 때까지 다음 과정을 반복한다.
2. K는 1부터 1씩 증가하고, K가 N보다 커질 때까지 N에서 K를 뺀다.
3. K가 N보다 크면 다시 K를 1로 하여 2.를 진행한다.
작성 코드
n = int(input())
sec = 0
k = 1
while n > 0:
if k > n:
k = 1
n -= k
sec += 1
k += 1
print(sec)
간단해서 설명이 필요가 없습니당
'코딩 테스트 > Baekjoon' 카테고리의 다른 글
[백준] 1668. 트로피 진열 (0) | 2021.04.15 |
---|---|
[백준] 1302. 베스트셀러 (0) | 2021.04.15 |
[백준] 1543. 문서 검색 (0) | 2021.04.14 |
[백준] 11004. K번째 수 (0) | 2021.04.14 |
[백준] 2751. 수 정렬하기 2 (0) | 2021.04.13 |