새소식

Study/Algorithm

[백준] 1568번 트로피 진열 - Node.js/JavaScript

  • -

 

시간 제한 메모리 제한 제출  정답  맞힌 사람 정답 비율
2 초 128 MB 5865 4306 3797 74.818%

문제

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

출처

  • 문제를 번역한 사람: baekjoon
  • 문제의 오타를 찾은 사람: neomind75

알고리즘 분류


 

처음에 이 문제를 봤을 땐 이게 뭔소리야...? 싶었다...

n이 주어지고 k도 주어져야 되는거 아닌가..? 하고,,

 

근데 그냥 n마리가 다 날아갈 때까지 총 몇 초가 걸리냐는 거니까

k는 1 부터 다 날아갈 때까지 계속 ++ 해주면 되는 거였다!

그!런!데!

만약, 현재 나무에 앉아있는 새의 수가 지금 불러야 하는 수 보다 작을 때는, 1부터 게임을 다시 시작한다.

이 조건이 있다!

 

예를 들어 n이 4면

4마리가 다 날아가려면 

k = 1 s = 1 n = n-k (4-1 = 3) 

k = 2 s = 2 n = 3-2= 1

k = 1 s = 3 n = 1-1= 0 << 원래 k는 3이지만 현재 n은 1이고 그럼 k보다 n이 작으니까 k가 다시 1

그래서 n이 4면 다 날아갈 때 걸리는 시간은 3이다.

 

let n = Number(require('fs').readFileSync('./input.txt').toString().trim())

let k = 1
let s = 0
function solution(n, k, s) {
  while (n > 0) {
  k++
  if(n > k) {
    n-= k
    s++
  }
  if (n <= k) {
    k = 1
    n-= k
    s++
  }
}
  return s
}

console.log(solution(n, k, s))

이걸 코드로 옮기면 이렇게 된다! 이해한 내용대로 코드를 짰다.

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.