[백준] 1308번: 귀걸이 _ JAVA

아로롱·2025년 5월 22일

algorithm

목록 보기
25/25

📍 문제

https://www.acmicpc.net/problem/1308

💻 답안 코드


import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n;
        int scenario = 0;
        while((n = Integer.parseInt(br.readLine())) != 0){
            Map<Integer, String> names = new HashMap<>();
            Set<Integer> list = new HashSet<>();

            scenario ++;

            for(int i = 0; i < n; i++){
                String name = br.readLine();
                names.put(i + 1, name);
            }

            for(int i = 0; i < (2 * n) - 1; i++){
                String line = br.readLine();
                StringTokenizer str = new StringTokenizer(line);
                // 여학생 번호는 최대 두 번이니까 A, B 를 저장해놓을 필요는 없다.
                int num = Integer.parseInt(str.nextToken());
                if(list.contains(num)) list.remove(num);
                else list.add(num);
            }

            int answer = list.iterator().next();
            String name = String.valueOf(names.get(answer));
            StringBuilder sb = new StringBuilder();
            sb.append(scenario).append(" ").append(name);
            System.out.println(sb);
        }
    }
}

💡

Set 은 인덱스가 없기 때문에 직접 꺼낼 수는 없지만,
이번 문제처럼 값이 하나만 남아있을 거라는 확신이 있다면
iterator 를 통해 꺼낼 수 있다.

🔥 iterator

  • 컬렉션 안의 요소들을 하나씩 꺼내기 위한 도구.
  • 하나씩 꺼내주는 반복자
  • for문도 내부적으로는 iterator 를 사용한다.

    즉, iterator는 자바 컬렉션을 꺼내 쓸 때 기본적인 원리 중 하나

int answer = list.iterator().next();

순서가 없지만 이번 문제에서는 관계가 없었기 때문에
쉽게 풀 수 있었다 !

profile
Dilige, et fac quod vis

0개의 댓글