[BAEKJOON] 백준 1568: 새(C#)

2024. 5. 8. 15:15IT/BaekJoon

문제 링크

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

 

 

문제

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

나무에 앉아 있는 새의 수 N이 주어질 때, 하나의 수를 노래하는데 1초가 걸린다고 하면, 모든 새가 날아가기까지 총 몇 초가 걸리는지 출력하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 새의 수 N이 주어진다. 이 값은 109보다 작거나 같은 자연수이다.

 

 

출력

첫째 줄에 정답을 출력한다.

 

 

 

통과한 답안

namespace _1568
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());

            int remainBirds = N;
            int cnt = 1;
            int time = 0;
            
            while (remainBirds > 0)
            {
                if (remainBirds >= cnt)
                {
                    remainBirds -= cnt;
                    cnt++;
                    time++;
                }
                else
                {
                    cnt = 1;
                }
            }

            Console.WriteLine(time);
        }
    }
}

 

문제가 좀 이해하기 난해하게 설명되어 있는데,

이를 풀어서 설명하면 새가 N마리 있고

1부터 시작해서 숫자에 해당하는 새가 날아가는 법칙을 가진다.

단, 남은 새의 수가 해당하는 숫자보다 작다면 수를 1로 변경해서 다시 진행한다.

 

예를 들어 새가 14마리가 있다면

1번에 1마리의 새가 날아가고

2번에 2마리의 새가 날아가고

3번에 3마리의 새가 날아가고

4번에 4마리의 새가 날아가는 식으로 진행하는 것이다.

4번까지 날아간 총 새의 수는 10마리로 남은 새의 수는 4마리이다.

이 때, 5번에서 5마리의 새가 날아가야 하는데 모자르므로

다시 1번으로 돌아가서 1마리의 새가 날아가고

2번으로 2마리의 새가 날아간다.

그렇게 되면 1마리의 새가 남으므로 1번으로 돌아가서 1마리의 새가 날아간다.

 

이를 남은 새의 수의 변화로 살펴보면

14 -> 13 -> 11 -> 8 -> 4 -> 3 -> 1 -> 0

의 순서로 진행되며 이에 걸린 시간(횟수)은 총 7이 된다.

 

알고리즘 문제를 풀면서 문제를 푸는 과정도 중요하지만,

문제를 해석하는 과정도 중요하다고 다시금 느낄 수 있는 문제였다.