[백준/Java] 1269번 :: 대칭 차집합

2024. 6. 2. 15:37· ✏️ 문제풀이/백준
목차
  1. | 문제
  2. | 풀이
  3. | 정리

| 문제

자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.

예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때,  A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.

 

| 입력

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.

 

| 출력

첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.

 

| 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
HashSet<Integer> setA = new HashSet<>();
HashSet<Integer> setB = new HashSet<>();
st = new StringTokenizer(br.readLine());
for(int i=0; i<A; i++)
{
setA.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine());
for(int i=0; i<B; i++)
{
setB.add(Integer.parseInt(st.nextToken()));
}
int count = 0;
for(int num : setA)
{
if(!setB.contains(num))
{
count++;
}
}
for(int num : setB)
{
if(!setA.contains(num))
{
count++;
}
}
System.out.println(count);
}
}

 

| 정리

첫 풀이는 ArrayList를 활용해서 풀었는데 시간 초과가 떴다.

HashSet이 더 빠르다는 것은 알고 있었지만, 조건 중에서 중복을 허용하지 않는다 라는 조건이 없어서 일부러 HashSet을 사용하지 않았다.

시간 초과가 뜨고 생각을 해보니,,, 차집합의 갯수를 세는 거니까 중복을 허용하지 않아도 문제 될 것이 없다,,? 라는 결론이 났다. 왜냐면 차집합을 구하려면 해당 원소가 있는지 없는지만 판별하면 되는 거고 중복되는 원소가 몇개 있는지는 중요하지 않다. 라는 생각에 HashSet으로 수정해서 다시 풀었고

맞았습니다!를 만났다~!

저작자표시 (새창열림)
  1. | 문제
  2. | 풀이
  3. | 정리
'✏️ 문제풀이/백준' 카테고리의 다른 글
  • [백준/Java] 1934번 :: 최소공배수
  • [백준/Java] 11478번 :: 서로 다른 부분 문자열의 개수
  • [백준/Java] 1764번 :: 듣보잡
  • [백준/Java] 10816번 :: 숫자 카드 2
bono-hye
bono-hye
공부를 합시다👩🏻‍💻bono-hye 님의 블로그입니다.
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
[백준/Java] 1269번 :: 대칭 차집합
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.