(Swift) 백준 1789 수들의 합

SteadySlower·2022년 5월 20일
0

Coding Test

목록 보기
41/298

1789번: 수들의 합

/*
 서로 다른 N개의 자연수의 합이 S -> 자연수 N의 최댓갓
 = 가장 작은 자연수 (1)부터 꽉꽉 채워넣어야 한다.
 
 등차수열의 합 공식을 활용하자: n * (n + 1) / 2
 */

let S = Int(readLine()!)!

var n = 0

repeat {
    n += 1
} while S >= n * (n + 1) / 2

print(n - 1)
  1. 문제가 너무 짧아서 이해하기 힘든... 그런 스타일입니다.
  2. “서로 다른” N개의 자연수의 합이 S인데
    1. S가 주어졌을 때 N의 최댓값을 찾는 것이 문제입니다.
  3. N개의 자연수가 “서로 달라야"하므로 최대한 가장 작은 자연수인 1부터 꽉꽉 채워 넣는 것이 필요합니다.
    1. 자연스럽게 1 ~ n까지의 가장 작은 수들을 나열해서 더하는 것이 N의 최댓값을 구하는 방법입니다.
    2. 등차수열의 합 공식 n * (n + 1) / 2를 활용합시다.
  4. n을 1부터 늘려가면서 S가 n * (n + 1) / 2보다 작아질 때까지 반복합니다.
  5. S가 n * (n + 1) / 2보다 작아졌다면 1부터 n까지 더했을 때 S보다 크다는 뜻이므로 -1을 해서 출력합시다.
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글