[Hackerrank 문제 풀이] Java Iterator

Junu Kim·2025년 11월 5일
post-thumbnail

[String Practice] Java Iterator

난이도: ★★☆☆☆ • solved on: 2025-11-05


문제 요약

문제 유형: Iterator, 자료형 검사
요구사항: Iterator를 이용해 리스트를 순회하면서, 문자열(String)인 원소만 출력해야 한다.


사용 개념

  1. 자료구조
  • Iterator — 컬렉션의 요소를 순차적으로 접근할 수 있는 반복자
  1. 알고리즘/기법
  • 반복문(while(it.hasNext()))
  • 타입 검사(instanceof)
  • 흐름 제어(continue)
  1. 핵심 키워드
  • instanceof, Iterator, continue

풀이 아이디어

  1. 문제 분해
    a. 컬렉션의 각 요소를 Iterator로 순회한다.
    b. instanceof로 타입을 확인해 String이 아닐 경우 continue로 건너뛴다.

  2. 핵심 로직 흐름

while (it.hasNext()) {
    Object element = it.next();
    if (!(element instanceof String)) continue;
    System.out.println(element);
}
  1. 예외 처리
  • 비어 있는 컬렉션(it.hasNext()false인 경우) — 루프 미실행

내 풀이

import java.util.*;

class Main {
    public static void main(String[] args) {
        ...
        Iterator<Object> it = list.iterator();

        while (it.hasNext()) {
        // implementation Part
            Object element = it.next();
            if (!(element instanceof String)) continue;
            System.out.println(element);
        }
    }
}

시간·공간 복잡도

  • 시간 복잡도: O(N)

  • 공간 복잡도: O(1)


어려웠던 점

  • instanceof를 통한 타입 판별의 정확한 활용법이 헷갈렸다.
    : 예약어이기 때문에 별 다른 메소드처럼 활용하는게 아니라 그 자체로 맥락이 된다. a instanceof b

  • Implementation part가 아닌 break;를 어떻게 조건에 따라 관리할 수 있을까에 대해서 고민이었다.
    : continue를 통해 조건문을 달지 않아도 일종의 조건문처럼 뒷부분을 무시하면 된다.

  • Iterator의 next() 호출 시점과 hasNext() 조건의 관계를 이해하는 데 시간이 걸렸다.
    : 별다른 list 형태로 저장되는게 아니라 iterator 자체가 이미 흐름을 관리하고 있기 때문에 hasNext를 값을 받아오는 동시에 다음으로 넘어간다라고 이해해야 했다.


배운 점 및 팁

  • continue는 루프를 종료하지 않고 “다음 반복으로 건너뛴다.”

  • instanceof는 다형성 구조에서 안전한 타입 판별을 가능하게 한다.

  • Iterator는 내부적으로 커서(cursor)를 이동시키므로 next() 호출 순서에 유의해야 한다.


참고 및 링크


추가 연습 문제

  • 비슷한 유형 (GPT 추천):
    1. Java ListIterator 활용 문제
    2. Java Generics 문제
  • 확장 문제 (GPT 추천):
    1. 다양한 타입 (Object 배열)에서 특정 타입만 필터링하는 문제
    2. Stream API로 동일 기능 구현 (filter, instanceof)
profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글