https://www.acmicpc.net/problem/26069
26069번: 붙임성 좋은 총총이
첫번째 줄에는 사람들이 만난 기록의 수 $N\ (1 \le N \le 1\ 000)$이 주어진다. 두번째 줄부터 $N$개의 줄에 걸쳐 사람들이 만난 기록이 주어진다. $i + 1$번째 줄에는 $i$번째로 만난 사람들의 이름 $A_i$
www.acmicpc.net
코드설명
Hashset을 활용합니다.
- HashSet을 사용하여 이미 춤을 추고 있는 사람들을 저장합니다. HashSet을 선택한 이유는 중복을 허용하지 않으며, 검색에 O(1)의 시간 복잡도를 갖기 때문입니다.
- 처음에는 "ChongChong"이 춤을 추고 있는 상태로 시작합니다.
- 입력으로 받은 사람들의 만남을 입력받으면서, 이미 춤을 추고 있는 사람 중 하나라도 포함되어 있는 경우, 두 사람 모두 춤을 추게 합니다.
- 각각의 파트너를 HashSet에 추가합니다.
- HashSet의 크기를 계산하여 춤을 추는 총 인원을 구합니다.
코드
package algorhythm; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.StringTokenizer; public class Main { public static int N, M; public static HashSet<String> hashset = new HashSet<String>(); public static int answer = 0; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); //먼저 춤을 추고 있습니다. hashset.add("ChongChong"); for(int i=0;i<N;i++) { st = new StringTokenizer(br.readLine()); String inputA = st.nextToken(); String inputB = st.nextToken(); if(hashset.contains(inputA) || hashset.contains(inputB)) { hashset.add(inputA); hashset.add(inputB); } } answer = hashset.size(); System.out.println(answer); } }
'알고리즘 > 해시를 사용한 집합과 맵' 카테고리의 다른 글
[백준] 9375 패션왕 신해빈 - HashMap(해시맵) + 시간초과(경우의 수에 대한 이해) JAVA (0) | 2024.03.28 |
---|---|
[백준] 2910 빈도 정렬 - LinkedHashMap(링크드해시맵) + LinkedHashSet(링크드해시셋) + Comparable JAVA (0) | 2024.03.28 |
[백준] 25192 인사성 밝은 곰곰이 - HashSet(해시셋) JAVA (0) | 2024.03.26 |
[백준] 17219 비밀번호 찾기 - HashMap(해시맵) JAVA (0) | 2024.03.26 |
[백준] 14425 문자열 집합 - HashSet(해시셋) JAVA (0) | 2024.03.26 |