코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/백준

14425번 : 문자열 집합

2022. 8. 17. 17:08

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

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

 

 

문제

 

 

코드

HashSet 사용 X

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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        String []s = new String[n];
        for(int i=0;i<n;i++) {
            s[i] = br.readLine();
        }
        String[] arr = new String[m];
        for(int i=0;i<m;i++) {
            arr[i] = br.readLine();
        }
        int count=0;
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(s[j].equals(arr[i])) {
                    count++; break;
                }
            }
        }
        bw.write(count+""); bw.flush();
    }
}

HashSet 사용 O

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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        HashSet<String> set = new HashSet();
        for(int i=0;i<n;i++) {
            set.add(br.readLine());
        }
        int count=0;
        for(int i=0;i<m;i++) {
            String s = br.readLine();
            if(!set.add(s)) count++;
            else set.remove(s);
        }
        bw.write(count+""); bw.flush();
    }
}

 

 

해결방법

처음 문제를 풀 땐 Set을 생각하지 못하고 배열로 풀었다. 이 방법도 맞긴 하지만 시간을 타이트하게 준다면 틀렸을 것이다. 두 번째 방법으로 HashSet을 사용하여 풀었는데 훨씬 속도가 빨랐다. 이때 유의할 점은 M개의 문자열 중에 중복되는 문자열이 있을 수 있으므로 M개의 문자열 중에 HashSet에 저장된 문자열은 카운팅 되지 않도록 바로 삭제해줘야 한다.  

'알고리즘 > 백준' 카테고리의 다른 글

2357번 : 최솟값과 최댓값  (0) 2022.08.18
1302번 : 베스트셀러  (0) 2022.08.17
17413번 : 단어 뒤집기2  (0) 2022.08.16
19941번 : 햄버거 분배  (0) 2022.08.16
1654번 : 랜선 자르기  (0) 2022.08.05
    '알고리즘/백준' 카테고리의 다른 글
    • 2357번 : 최솟값과 최댓값
    • 1302번 : 베스트셀러
    • 17413번 : 단어 뒤집기2
    • 19941번 : 햄버거 분배
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바