본문 바로가기
  • 시 쓰는 개발자
알고리즘/코테 스터디 (2024)

1789 수들의 합

by poetDeveloper 2024. 8. 13.
반응형

💡문제 분석 요약

  • 서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까 ?
  • 이때 중요한 건, 이 자연수 합의 최대값이 아니라 최대 "개수"를 구하는 것이다. 이거 잘못 읽어서 살짝 헤맸다.

💡알고리즘 설계

  • 최대 "개수"라는 것에 주목해보자. 숫자가 많이 들어갈수록 이득이다. 그러므로 가장 작은 수부터 채워넣는 것이 이득이라는 소리.

💡코드

n = int(input())
i = 0

# 핵심 : 숫자들 합이 n을 만족시키는 최대 개수를 구하는 것
# 따라서, 가장 작은 수부터 채워나가는 것이 유리함 -> 0부터 한개씩 채워나감
# ex) 200이라는 값에 최대 몇개의 수가 들어가느냐? 200부터 0, 1, 2, ... 차례로 빼보면 됨.

while True:
    if n < i: # 만약 n = n-i 했을 때 i보다 작아지면, 이제 들어갈 숫자가 더이상 없는 상황임. = 이전까지가 최대값이라는 소리
        print(i-1) # 음수가 되기 직전의 값이 최대 개수를 의미
        break
    else:
        n = n-i # i = 0으로 초기화 한 후, n에서 차례로 빼줌
        i += 1 # i값을 1, 2, 3 ... 늘려감

💡시간복잡도

  • i-1번만 실행시키면 끝난다. O(i-1) = O(i)

💡 틀린 이유

  • 끝에서부터 빼는게 아니라 0부터 채워나가서 쉽게 못풀었다. 그래서 lst에 append하고, sum으로 n과 같은지 비교해서 len를 출력하려고 했다. 근데 생각보다 신경써야할 것이 많아 쉽게 못풀었던 것 같다.

💡 틀린 부분 수정 or 다른 풀이

  • 0부터 더해가는게 아니라, n부터 빼가는 방식으로 풀이

💡 느낀점 or 기억할정보

  • 문제를 잘 읽는 것이 제일 제일 중요하다. 문제 해석이 풀이 시작을 좌우한다.
 
반응형

'알고리즘 > 코테 스터디 (2024)' 카테고리의 다른 글

프로그래머스 - 방문 길이 (핵심 : line 체크)  (0) 2024.09.11
1303 전쟁  (0) 2024.08.13
12845 모두의 마블  (0) 2024.08.03
1495 기타리스트  (0) 2024.08.02
12026 BOJ 거리  (0) 2024.08.01