ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 10773번] 제로 (Java 풀이)
    Algorithm/기타 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);
    
    	}
    
    }
    

     

     

     

     

    댓글

Designed by Tistory.