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);

	}

}