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

문제 유형: Iterator, 자료형 검사
요구사항: Iterator를 이용해 리스트를 순회하면서, 문자열(String)인 원소만 출력해야 한다.
- 자료구조
- Iterator — 컬렉션의 요소를 순차적으로 접근할 수 있는 반복자
- 알고리즘/기법
- 반복문(while(it.hasNext()))
- 타입 검사(instanceof)
- 흐름 제어(continue)
- 핵심 키워드
instanceof,Iterator,continue
풀이 아이디어
문제 분해
a. 컬렉션의 각 요소를 Iterator로 순회한다.
b.instanceof로 타입을 확인해String이 아닐 경우continue로 건너뛴다.핵심 로직 흐름
while (it.hasNext()) { Object element = it.next(); if (!(element instanceof String)) continue; System.out.println(element); }
- 예외 처리
- 비어 있는 컬렉션(
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() 호출 순서에 유의해야 한다.
문제 링크: https://www.hackerrank.com/challenges/java-iterator/problem
참고 블로그/깃허브: 없음