[C++] 백준 1568 새
반응형
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 |