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;
}
}
처음에는 단순하게 생각해서 sum이 n보다 작은 동안만 for문을 돌리면 된다고 생각했다.
그러나 while문 안에 for문을 중첩으로 쓰면, numbers 배열 전체를 한 번만 더한 후 바로 break로 빠져나온다.
즉, 사실상 while이 의미 없고, numbers 원소 전체를 다 더한 값이 sum에 들어가고 반환된다.
아래 방법으로 수정해주었다.
numbers
배열을 앞에서부터 순서대로 하나씩 더하다가,- 그 합이
n
보다 초과하는 순간까지 더하고, - 그 합(sum) 을 바로 return