1 분 소요

1. 문제

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

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

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

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

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

// 예제 입력 1
14

// 예제 출력 1
7

// 예제 입력 2
1

// 예제 출력 2
1

// 예제 입력 3
3

// 예제 출력 3
2

// 예제 입력 4
4

// 예제 출력 4
3

// 예제 입력 5
100

// 예제 출력 5
18


2. 핵심 아이디어

  • N이 최대 1,000,000,000
  • K가 반복적으로 증가하므로, 날아가는 새의 마리 수는 빠르게 증가함
  • 따라서 문제에서 요구하는 대로 단순히 구현


3. Python 문제풀이

import sys

n = int(sys.stdin.readline())
second = 0
fly = 1

while n != 0 :
  if fly > n :
    fly = 1
  n -= fly
  fly += 1
  second += 1

print(second)


4. Java 문제풀이

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    int second = 0;
    int fly = 1;

    while (n != 0) {
      if (fly > n) {
        fly = 1;
      }
      n -= fly;
      fly++;
      second++;
    }

    System.out.println(second);
  }
}

댓글남기기