[C++] 백준 1568 새
2021. 3. 27.
반응형

www.acmicpc.net/problem/1568

 

1568번: 새

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

www.acmicpc.net

 

1. 서론

 

처음에 문제가 이해가 안 됐는데 쉬운 문제다. 

 

2. 문제 풀이

 

N마리의 새가 앉아있다. 새는 숫자를 말하는데 K를 말하면 K마리의 새가 날아간다. 초당 한 개의 수를 말하고 수는 1부터 오름차순으로 노래한다. 

 

처음에 문제를 이해하기 어려웠던게 K라는 숫자도 그럼 줘야 하는 게 아닌가 했는데 그게 아니었다. 

숫자는 오름차순으로 1초에 한 번씩 1 2 3 4 ... 라고 말한다고 치는 것이었다. 

그럼 문제의 예시에서 나온 것처럼 N이 14라고 쳤을 때 새들이 1 2 3 4 이렇게 외치면서 1일 때는 1마리, 2일 때는 2마리씩 날아가는 것이다.

근데 여기서 주의 할 점은 초마다 새가 떠나가는데 남은 새의 수보다 외칠 수가 더 커지면 다시 숫자가 1로 초기화되는 것이다.

그럼 14인 경우에는 1 + 2 + 3 + 4 + 1 + 2 + 1 = 14 이므로 7초 후에 새가 전부 다 날아가는 것이다. 

 

결국 새가 전부 날아가는 시간을 구하는 게 문제이므로 7이 답이다. 그냥 더해주는 동시에 남은 수보다 외친 수가 더 큰가 아닌가만 체크하면서 시간을 count 해주면 되는 간단한 문제이다.

 

3. 코드 설명

 

#include <iostream>

using namespace std;

int main()
{
    int i = 1, n, c = 0;

    cin >> n;

    while(1)
    {
        if (n < i)
            i = 1;

        n -= i++;
        c++;

        if (n <= 0)
        {
            cout << c << endl;
            return 0;
        }
    }    
}

 

n을 입력받고 반복문을 돌린다.

n에서 i를 계속 빼주는데 i는 계속 1씩 증가한다. 대신에 n보다 i가 더 커지면 다시 i를 1로 돌린다.

c는 몇 초가 걸리는지 count하는 변수이다. n이 0보다 작거나 같아지면 새가 모두 날아갔다는 뜻이므로 c를 출력하고 메인 함수를 끝낸다.

 

 

반응형

'Algorithm' 카테고리의 다른 글

[C++] 백준 1236 성 지키기  (1) 2021.03.28
[C++] 백준 1668 트로피 진열  (0) 2021.03.27
[C++] 백준 1302 베스트셀러  (0) 2021.03.27
[C++] 백준 1543 문서 검색  (0) 2021.03.26
[C++] 백준 11004 K번째 수  (0) 2021.03.26
myoskin