[BOJ] 1269. 대칭 차집합

2022. 11. 6. 20:43·algorithm

문제

자연수를 원소로 갖는 공집합이 아닌 두 집합 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을 넘지 않는다.

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

해결 방법

  • a 집합과 b 집합을 각각 hashmap에 저장
  • a-b 인 경우 acount++
  • b-a 인 경우 bcount++
  • acount+bcount
  • hashmap의 keyset을 사용하면 반복문을 돌릴 수 있다.
    // 대칭 차집합
    public class Week04_1269 {
      public static void main(String[] args) throws IOException {
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
          StringTokenizer st = new StringTokenizer(br.readLine());
          int a = Integer.parseInt(st.nextToken());
          int b = Integer.parseInt(st.nextToken());
          st = new StringTokenizer(br.readLine());
          HashMap<Integer, Integer> ahm = new HashMap<>();
          for (int i = 0; i < a; i++) {
              ahm.put(Integer.parseInt(st.nextToken()), i);
          }
          st = new StringTokenizer(br.readLine());
          HashMap<Integer, Integer> bhm = new HashMap<>();
          for (int i = 0; i < b; i++) {
              bhm.put(Integer.parseInt(st.nextToken()), i);
          }
          int aMinusB = 0;
          for (int i : ahm.keySet()) {
              if (!bhm.containsKey(i)) {
                  aMinusB++;
              }
          }
          int bMinusA = 0;
          for (int i : bhm.keySet()) {
              if (!ahm.containsKey(i)) {
                  bMinusA++;
              }
          }
          bw.write(aMinusB + bMinusA + "");
          bw.flush();
          bw.close();
      }
    }
저작자표시 (새창열림)

'algorithm' 카테고리의 다른 글

[BOJ] 2630. 색종이 만들기  (0) 2022.11.16
[BOJ] 11478. 서로 다른 부분 문자열의 개수  (0) 2022.11.06
[BOJ] 14425. 문자열 집합  (0) 2022.11.06
[BOJ] 1541. 잃어버린 괄호  (0) 2022.11.06
[BOJ] 11399. ATM  (0) 2022.11.06
'algorithm' 카테고리의 다른 글
  • [BOJ] 2630. 색종이 만들기
  • [BOJ] 11478. 서로 다른 부분 문자열의 개수
  • [BOJ] 14425. 문자열 집합
  • [BOJ] 1541. 잃어버린 괄호
siio
siio
  • siio
    siio's blog
    siio
  • 전체
    오늘
    어제
    • category (48)
      • Projects (4)
      • Java (1)
      • Spring (1)
      • DevOps (0)
      • algorithm (42)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    jvm
    risingcamp
    Knapsack
    JDK
    @Transactional
    외판원순회
    Cross Domain
    jre
    ncp
    connection pool
    트러블슈팅
    BufferedReader
    SSE
    dfs
    SWYP
    same site
    10971
    http only cookie
    Scanner
    git #github #협업프로세스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
siio
[BOJ] 1269. 대칭 차집합
상단으로

티스토리툴바