백준 Baekjoon

[C언어] 백준 1568 : 새

sujo 2020. 8. 14. 21:50

백준 1568 : 새

 

문제 링크:

https://www.acmicpc.net/problem/1568

 

1568번: 새

N마리의 새가 나무에 앉아있고, 자연수를 배우기 원한다. 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 어떤 숫자 K를 노래할 때, K마리의 새가 나무에서 하늘을 향해 날아간다. 만약, 현��

www.acmicpc.net

 

 

문제 내용:

(요약) 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 숫자 K를 노래할 때, K마리의 새가 하늘을 향해 날아간다. 만약, 현재 나무에 앉아있는 새의 수가 지금 불러야 하는 수 보다 작을 때는, 1부터 다시 시작한다.

앉아있는 새 N마리가 주어질 때, 하나의 수를 노래하는데 1초가 걸린다고 하면, 모든 새가 날아가기까지 총 몇 초가 걸리는가?

 

 

Idea:

새들은 1, 2, 3, .... , k 마리씩 노래하다가 날아가고, 현재 나무에 앉아있는 새의 수가 지금 불러야하는 수보다는 작을 땐 1부터 다시 시작한다.

 

따라서 알고리즘은 아래와 같다.

  • k를 1씩 증가시키며 N마리에서 빼준다.
  • 만약 N이 k보다 작다면 k를 1로 초기화하여 반복한다.
  • 결과값이 0이 나오면 탐색을 종료한다.

 

 

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main() {
    int n, k = 0, time = 0;
    scanf("%d"&n);
    while (1) {
        k++;
        if (n == 0break;
        if (n < k) k = 1;
        n -= k;
        time++;
    }
    printf("%d\n", time);
    return 0;
}
cs