본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 6차 9번 - 스택으로 큐 만들기

by 우공80 2022. 11. 18.
728x90

스택으로 큐 만들기

문제 지문 #9


스택 두 개를 이용해 Queue 자료구조를 만들었을 때, Queue 자료 구조의 pop(또는 dequeue) 메서드를 구현하려 합니다. Queue란 먼저 삽입한 데이터를 먼저 빼내는 자료구조를 뜻합니다. pop 메서드를 만들기 위해 다음과 같이 프로그램 구조를 작성했습니다.

1. 스택2가 비었다면 스택1에 아무것도 남지 않을때까지 스택1에서 pop한 값을 스택2에 push 한다.
2. 스택2에서 pop한 값을 리턴한다.

두 ArrayList stack1, stack2가 매개변수로 주어질 때, 두 ArrayList를 스택으로 이용해 Queue 자료 구조의 pop 메서드를 구현하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 메서드와 매개변수를 알맞게 채워주세요.

※ ArrayList index가 0인 부분을 스택의 bottom으로 생각합니다.


매개변수 설명

두 ArrayList stack1와 stack2가 solution 메서드의 매개변수로 주어집니다.

  • stack1과 stack2는 길이가 0 이상 10 이하입니다.
    • stack1과 stack2의 길이가 모두 0인 경우는 주어지지 않습니다.
  • stack1과 stack2의 원소는 100 이하인 정수입니다.

return 값 설명

stack1과 stack2로 구현한 큐에서 pop(또는 dequeue)한 값을 return 해주세요.


예시
stack1 stack2 result
[1,2] [3,4] 4
[1,2,3] [] 1
예시 설명

예시 #1
stack2가 비지 않았으므로 stack2에서 pop 한 결과인 4를 리턴합니다.

예시 #2

  1. stack2가 비었으므로 stack1의 원소를 전부 pop 해 stack2로 넣습니다. 이 결과 stack2에는 [3,2,1]이 들어갑니다.
  2. stack2에서 pop 한 결과인 1을 리턴합니다.
728x90

 

혼자 풀이


빈칸 채우기 문제입니다. 스택 2개로 큐를 구현하는 문제입니다.

스택 1에 들어간 것을 순차적으로 꺼내 다른 스택 2에 담으면 스택 2에서 꺼낼 때 스택 1에 가장 먼저 들어간 원소가 가장 먼저 나오기 때문에 큐처럼 동작합니다.

문제에서 스택 2가 비지 않았을 때는 어떻게 하라고 명시적으로 나와있지 않은데, 스택 2가 비지 않았을 때는 그냥 스택 2에서 pop을 하면 됩니다.

import java.util.*;
import java.util.ArrayList;

class Main {
	//스택을 pop 하는 함수
    Integer func_a(ArrayList<Integer> stack) {
        Integer item = stack.remove(stack.size() - 1);
        return item;
    }
    //스택2가 비지 않았으면, 스택1의 원소를 모두 스택2에 담는 함수
    void func_b(ArrayList<Integer> stack1, ArrayList<Integer> stack2) {
        // while(!func_빈칸(빈칸)) {
        //     Integer item = func_빈칸(빈칸);
				while(!func_c(stack1)){//pop이 안될때까지  틀렸음..;;
            Integer item = func_a(stack1); //stack1에서 pop해서 
        
            stack2.add(item); //stack2에 넣음
        }
    }
    //stack이 비어있는지 확인하는 함수
    boolean func_c(ArrayList<Integer> stack) {
        return (stack.size() == 0);
    }
    //스택 두개를 이용해 Queue를 만든다는 의미는 스택1에서 꺼내서 스택2에 넣으면 스택1의 원소의 순서가 바뀌므로
	  // 스택2에서 pop을 하면 Queue처럼 먼저 들어간 것이 먼저 나오게 됨
    public int solution(ArrayList<Integer> stack1, ArrayList<Integer> stack2) {
        // if(func_빈칸(빈칸)) {
        //     func_빈칸(빈칸);
        // }
        // Integer answer = (int)func_빈칸(빈칸);
			 	if(func_c(stack2)) {
            func_b(stack1,stack2);  //stack1에서 꺼내 stack2에 넣는다.
        }
        Integer answer = (int)func_a(stack2);  //stack2에서 pop한 결과를 리턴한다.
        return answer;
    }
    
    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.    
    public static void main(String[] args) {
        Main sol = new Main();
        
        ArrayList<Integer> stack1_1 = new ArrayList<Integer>();
        ArrayList<Integer> stack2_1 = new ArrayList<Integer>();
        stack1_1.add(1);
        stack1_1.add(2);
        stack2_1.add(3);
        stack2_1.add(4);
        int ret1 = sol.solution(stack1_1, stack2_1);
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

    
        ArrayList<Integer> stack1_2 = new ArrayList<Integer>();
        ArrayList<Integer> stack2_2 = new ArrayList<Integer>();
        stack1_2.add(1);
        stack1_2.add(2);
        stack1_2.add(3);
        int ret2 = sol.solution(stack1_2, stack2_2);
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
    }
}

 

정답


혼자 풀이와 정답이 동일합니다.

실습은 아래 참고


2022.10.25 - [Programming/Cos Pro 1급] - Cos Pro 1급 공부 사이트 추천 - 구름 에듀(https://edu.goorm.io/)

 

Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/)

구름 EDU??? YBM 공식 사이트에서 받은 문제 지문/문제 코드/정답 코드를 intellij에서 공부하다가 후배 추천으로 구름 에듀를 알게 되었습니다. 문제 지문 따로 문제 코드 따로 열어보는 게 여간 불

woogong80.tistory.com

728x90

댓글