Algorithm/기타
[백준 10773번] 제로 (Java 풀이)
agility
2020. 2. 27. 18:48
백준알고리즘 10773번 : 제로
등장하는 숫자들의 합을 구하되,
숫자 0이 나오면 가장 최근에 나온 숫자는 합에서 제외하여 총 합을 출력하는 문제이다.
처음에는 0은 바로 방금 전에 나온 숫자만 빼주는 문제인 줄 알았다.
그러니까, 3, 4, 5, 0, 0 과 같은 방식으로 나왔으면,
5는 없어지되, 마지막 0은 정상적으로 더해줘야 되는 값인줄 알았는데
결과적으로 문제는 0의 갯수만큼 가장 최근에 나온 숫자들을 합에서 제외하는 것을 요구한다.
즉 해당 예제의 답은 4와 5를 제외한 3인것이다.
0의 갯수를 Count, 다른 숫자들은 List에 집어 넣은 뒤, LIst에서 0의 갯수만큼을 뺸 길이만 더할까 하다,
이러면 for문이 두번 돌아 시간초과가 발생할 듯 싶어
하나의 for문에서 LIst의 add, remove와 총 합의 덧셈, 뺄셈을 병행했다.

풀이 과정
1. ArrayList와 총 합을 넣은 int 변수를 선언 한뒤,
길이만큼 for문을 돌게하여 Scanner 값을 받아온다.
2-1. 받아온 값이 0이 아니면,
ArrayList에 값을 추가하고 총 합에 해당 값을 더한다.
2-2. 받아온 값이 0이면,
ArrayList의 가장 최근에 받아온 값을 삭제하고, 총 합에서 해당 값을 뺀다.
3. 출력한다.
소스 ▽
더보기
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) { // 10773번 제로
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
int sum = 0;
ArrayList<Integer> arr = new ArrayList<Integer>();
for (int i = 0; i < count; i++) {
int num = sc.nextInt();
if (num != 0) {
arr.add(num);
sum += num;
} else {
sum -= arr.remove(arr.size() - 1);
}
}
System.out.println(sum);
}
}