코린이의 소소한 공부노트

[LeetCode/Medium] 284. Peeking Iterator 본문

코딩테스트 풀이/JAVA

[LeetCode/Medium] 284. Peeking Iterator

무지맘 2023. 1. 26. 23:29

목표: peek()을 지원하는 PeekingIterator 구현

- 생성자

next(), hasNext(), peek() 메서드

 

1. Input

- 생성자: Iterator<Integer> iterator> 객체

 

2. Output

- next(): 배열의 다음 객체를 반환하고, 포인터를 1칸 이동한다.

- hasNext(): 배열에 요소가 남아있다면 true, 없다면 false를 반환한다.

- peek(): 배열의 다음 객체를 반환하고, 포인터는 이동하지 않는다.

 

3. Constraint

1) 1 <= nums.length <= 1000

2) 1 <= nums[i] <= 1000

3) 모든 메서드 호출은 유효하다.

4) 메서드가 최대 1000번 호출될 수 있다.

 

4. Example

PeekingIterator peekingIterator = new PeekingIterator([1, 2, 3]); // [1,2,3]
peekingIterator.next();    // 1, 포인터는 2
peekingIterator.peek();    // 2, 포인터는 2
peekingIterator.next();    // 2, 포인터는 3
peekingIterator.next();    // 3, 포인터는 null
peekingIterator.hasNext(); // false

 

5. Code

1) 첫 코드(2023/01/26)

class PeekingIterator implements Iterator<Integer> {
    int pointer;
    ArrayList<Integer> elements;

    public PeekingIterator(Iterator<Integer> iterator) {
        pointer = 0;
        elements = new ArrayList<Integer>();
        while(iterator.hasNext())
            elements.add(iterator.next());
    }

    // Returns the next element in the iteration without advancing the iterator.
    public Integer peek() {
        return elements.get(pointer);
    }

    // hasNext() and next() should behave the same as in the Iterator interface.
    // Override them if needed.
    @Override
    public Integer next() {
        return elements.get(pointer++);
    }

    @Override
    public boolean hasNext() {
        return pointer < elements.size();
    }
}

- 생각보다 성능이 좋아서 놀랐다.