시간 제한 |
메모리 제한 |
제출 |
정답 |
맞힌 사람 |
정답 비율 |
2 초 |
128 MB |
5865 |
4306 |
3797 |
74.818% |
문제
N마리의 새가 나무에 앉아있고, 자연수를 배우기 원한다. 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 어떤 숫자 K를 노래할 때, K마리의 새가 나무에서 하늘을 향해 날아간다. 만약, 현재 나무에 앉아있는 새의 수가 지금 불러야 하는 수 보다 작을 때는, 1부터 게임을 다시 시작한다.
나무에 앉아 있는 새의 수 N이 주어질 때, 하나의 수를 노래하는데 1초가 걸린다고 하면, 모든 새가 날아가기까지 총 몇 초가 걸리는지 출력하는 프로그램을 작성하시오.
처음에 이 문제를 봤을 땐 이게 뭔소리야...? 싶었다...
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))
이걸 코드로 옮기면 이렇게 된다! 이해한 내용대로 코드를 짰다.