Skip to main content

26. [Java] n보다 커질 때까지 더하기

https://school.programmers.co.kr/learn/courses/30/lessons/181884

  • 정수 배열 numbers와 정수 n이 매개변수로 주어진다.
  • numbers의 원소를 앞에서부터 하나씩 더하다가
  • 그 합이 n보다 커지는 순간
  • 이때까지 더했던 원소들의 합을 return

  • 1 ≤ numbers의 길이 ≤ 100
  • 1 ≤ numbers의 원소 ≤ 100
  • 0 ≤ n < numbers의 모든 원소의 합

정답코드

class Solution {
    public int solution(int[] numbers, int n) {
        int sum = 0;
        while (sum < n) {
            for (int num : numbers) {
                sum += num;
            }
        }
        return sum;
    }
}
  • sum을 누적하면서 바로 if (sum > n) 체크하는 게 중요
  • while 문은 필요 없고, 단순한 for 루프로 처리 가능
  • 종료 조건이 명확해야 무한 루프 피할 수 있음

오답

class Solution {
    public int solution(int[] numbers, int n) {
        int sum = 0;
        while (sum < n) {
            for (int num : numbers) {
                sum += num;
            }
            break;
        }
        return sum;
    }
}

image.png

처음에는 단순하게 생각해서 sum이 n보다 작은 동안만 for문을 돌리면 된다고 생각했다.
그러나 while문 안에 for문을 중첩으로 쓰면, numbers 배열 전체를 한 번만 더한 후 바로 break로 빠져나온다.
즉, 사실상 while이 의미 없고, numbers 원소 전체를 다 더한 값이 sum에 들어가고 반환된다.

아래 방법으로 수정해주었다.

  • numbers 배열을 앞에서부터 순서대로 하나씩 더하다가,
  • 그 합이 n보다 초과하는 순간까지 더하고,
  • 합(sum)바로 return