TIL

[코테연습] 341. Flatten Nested List Iterator

크라00 2024. 6. 23. 16:02

- 스택/큐 문제

- Iterator<Integer> 를 implement 한 NestedIterator 를 구현하는 문제

- Iterator 해야하는 NestedInteger 는 getInteger(), isInteger(), getList() 메소드를 가지고 있다.

 

- 문제풀이

 1. NestedInteger 를 Stack 에 모두 넣는다.

 2. Stack 에서 NestedInteger 객체 한개를 꺼낸다. ( while 문으로 Stack이 isEmpty() 하는지 확인하면서 )

 3. NestedInteger.isInteger() 가 intger 라면

    3-1. 전역변수 새로운 Stack 객체에 NestedIntger.getInteger() 하여 저장한다.

 4. NestedInteger.isInteger()가 integer 가 아니라면, 

    4-1. getList하여 for 문으로 NestedInteger 를 반복하여 다시 stack 에 넣는다.

 5. 위와 같은 방법을 반복하면 최종적으로 전역변수 stack 에는 순수한 Integer 만 FIFO 로 들어가있게 된다.

 6. hasNext() 와 next() 함수를 stack.isEmpty() 와 stack.pop() 함수로 구현한다.

 

 

 

 

public class NestedIterator implements Iterator<Integer> {

    Stack<Integer> list;
    public NestedIterator(List<NestedInteger> nestedList) {
        list = new Stack<>();
        Stack<NestedInteger> stack = new Stack<>();
        for(NestedInteger number : nestedList){
            stack.add(number);
        }

        while(!stack.isEmpty()) {
            NestedInteger number = stack.pop();
            if (number.isInteger()) {
                list.add(number.getInteger());
            } else {
                for(NestedInteger ele : number.getList()) {
                    stack.add(ele);
                }
            }
        }
    }

    @Override
    public Integer next() {
        return list.pop();
    }

    @Override
    public boolean hasNext() {
        return !list.isEmpty();
    }
}