언어/[Java]

[Java] Stack, 백준10773, 2775

dayeonsheep 2023. 7. 19. 18:07

10773 제로 문제를 풀다가 

pop 함수같은 게 있으면 얘도 마지막 것만 빼내면 좋을 것 같아서

찾아봤더니 stack을 발견했다 

import java.util.*;

public class Main {
	public static void main (String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N= sc.nextInt();
		int[] arr = new int[N];
		int sum=0;
		
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
			if (i == 0){
				arr = Arrays.copyOfRange(arr, N-2, N);
			} sum += arr[i];
		}
		System.out.print(sum);
	}
}

우선 이 코드는 엉망진창인 코드다

 

<내가 생각한 풀이>

1. 배열에 저장

2. 0이 들어오면 마지막 원소 삭제

그래서 ArrayList 에 copyOfRange로 마지막 원소 지워주는걸  n-2부터 n까지로 썼는데... 땡 땡 땡입니다...

 

pop이라는 좋은 함수를 써봅시다

import java.util.*;

public class Main {
	public static void main (String[] args) {
    	Scanner sc = new Scanner(System.in);
        Stack<Integer> stack = new Stack<>();
       
        int K = sc.nextInt();
        int num = 0;
        int sum = 0;
        
        for(int i=0; i<K; i++) {
        	num = sc.nextInt();
        	
        	if (num !=0) {
        		stack.push(num);
        	}else {
        		stack.pop();
        	}
        }
        for(int i=0; i<stack.size(); i++) {
        	sum += stack.elementAt(i);
        }
        System.out.print(sum);
        		
	}
}

이런저런 코드를 다 살펴봤지만 이 코드가 내가 이해하기에 가장 쉽고 직관적이었다

우선 스택은 더 공부해봐야겠지만

Stack<Integer> stack = new Stack<>();

로 선언해서 쓰는 걸 알게되었다

 

  • 2775 부녀회장이 될테야
package Study;

import java.util.*;

public class study1 {
	public static void main(String[] args) {	
		Scanner sc = new Scanner(System.in);
		
		int[][] arr = new int[15][15]; // [층][호]
		
		for(int i=0; i<15; i++) {
			arr[i][1]=1; //모든 층의 1호는 1
			arr[0][i]=i; //0층의 i호는 i
		}
		
		for(int i=1; i<15; i++) {
			for(int j=2; j<15; j++) {
				arr[i][j] = arr[i][j-1]+arr[i-1][j]; //arr[자기층][호수]=arr[자기층][호수-1]+arr[아래층][호수]
			}
		}
		int T = sc.nextInt();
		
		for(int i=0; i<T; i++) {
			int k = sc.nextInt();
			int n = sc.nextInt();
			System.out.println(arr[k][n]);
		}
	}
}

처음에 이걸 어떻게 풀어야되나 좀 막막했는데

2차원 배열을 이용하면 엄청 쉽게 풀 수 있는 문제였다

arr[i][j] = arr[i][j-1]+arr[i-1][j]; //arr[자기층][호수]=arr[자기층][호수-1]+arr[아래층][호수]

이 부분을 이해하고 생각하는 데 시간이 좀 걸렸다

2차원 배열 입력 받을 때 0층이랑 1호는 위에서 선언해놨으니까 걔네 빼야되는 거 깜빡해서 틀림

그리고 test case를 저렇게 밑에 두는 게 훨씬 나은 문제였다