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();
}
}