πŸ“š μ½”λ”©ν…ŒμŠ€νŠΈ/λ°±μ€€ & ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[λ°±μ€€][JAVA]10773번 : μŠ€νƒ(제둜)

deep_lee 2022. 10. 5. 18:29

문제

λ‚˜μ½”λ” κΈ°μž₯ μž¬λ―Όμ΄λŠ” 동아리 νšŒμ‹μ„ μ€€λΉ„ν•˜κΈ° μœ„ν•΄μ„œ μž₯λΆ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 쀑이닀.

μž¬ν˜„μ΄λŠ” 재민이λ₯Ό λ„μ™€μ„œ λˆμ„ κ΄€λ¦¬ν•˜λŠ” 쀑인데, μ• μ„ν•˜κ²Œλ„ 항상 μ •μ‹ μ—†λŠ” μž¬ν˜„μ΄λŠ” λˆμ„ μ‹€μˆ˜λ‘œ 잘λͺ» λΆ€λ₯΄λŠ” 사고λ₯Ό 치기 μΌμ‘€μ˜€λ‹€.

μž¬ν˜„μ΄λŠ” 잘λͺ»λœ 수λ₯Ό λΆ€λ₯Ό λ•Œλ§ˆλ‹€ 0을 μ™Έμ³μ„œ, κ°€μž₯ μ΅œκ·Όμ— μž¬λ―Όμ΄κ°€ μ“΄ 수λ₯Ό μ§€μš°κ²Œ μ‹œν‚¨λ‹€.

μž¬λ―Όμ΄λŠ” μ΄λ ‡κ²Œ λͺ¨λ“  수λ₯Ό λ°›μ•„ 적은 ν›„ κ·Έ 수의 합을 μ•Œκ³  μ‹Άμ–΄ ν•œλ‹€. 재민이λ₯Ό λ„μ™€μ£Όμž!

μž…λ ₯

첫 번째 쀄에 μ •μˆ˜ Kκ°€ μ£Όμ–΄μ§„λ‹€. (1 ≤ K ≤ 100,000)

이후 K개의 쀄에 μ •μˆ˜κ°€ 1κ°œμ”© μ£Όμ–΄μ§„λ‹€. μ •μˆ˜λŠ” 0μ—μ„œ 1,000,000 μ‚¬μ΄μ˜ 값을 κ°€μ§€λ©°, μ •μˆ˜κ°€ "0" 일 κ²½μš°μ—λŠ” κ°€μž₯ μ΅œκ·Όμ— μ“΄ 수λ₯Ό μ§€μš°κ³ , 아닐 경우 ν•΄λ‹Ή 수λ₯Ό μ“΄λ‹€.

μ •μˆ˜κ°€ "0"일 κ²½μš°μ— μ§€μšΈ 수 μžˆλŠ” μˆ˜κ°€ μžˆμŒμ„ 보μž₯ν•  수 μžˆλ‹€.

좜λ ₯

μž¬λ―Όμ΄κ°€ μ΅œμ’…μ μœΌλ‘œ 적어 λ‚Έ 수의 합을 좜λ ₯ν•œλ‹€. μ΅œμ’…μ μœΌλ‘œ 적어낸 수의 합은 231-1보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μ΄λ‹€.

 

 

 


λ‹¨μˆœν•˜κ²Œ 수 μž…λ ₯을 λ°›μ•„μ„œ μƒμ„±ν•œ stack에 push와 pop λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ 

ν•΄κ²°ν•˜λŠ” λ¬Έμ œμ˜€λ‹€.


 

 

 

import java.util.*;
public class Main {
    public int solution(int n, int[] arr){
        int answer=0;
        Stack<Integer> stack=new Stack<>();
        for(int x:arr){
            if (x!=0)
                stack.push(x);
            else
                stack.pop();
        }
        for(int i=0; i<stack.size(); i++){
            answer+=stack.get(i);
        }
        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = kb.nextInt();
        }
        System.out.println(T.solution(n, arr));
    }
}