ALGORITHM

[JAVA] 백준 14426번- 접두사 찾기

연듀 2022. 8. 6. 12:51

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

 

14426번: 접두사 찾기

문자열 S의 접두사란 S의 가장 앞에서부터 부분 문자열을 의미한다. 예를 들어, S = "codeplus"의 접두사는 "code", "co", "codepl", "codeplus"가 있고, "plus", "s", "cude", "crud"는 접두사가 아니다. 총 N개의 문자

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 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();

        int answer=0;
        while(m-- >0){
            String str= br.readLine();
            for(int i=0; i<n; i++){
                int correct =0;
                for(int j=0; j<str.length(); j++){ // 한 알파벳씩 검사
                    if(s[i].charAt(j) == str.charAt(j)) correct++; //같으면 다음 알파벳 비교
                    else break; // 다르면 집합 S의 그 다음 문자열 비교하러
                }
                if(correct == str.length()) { // 검사해야하는 단어 전체가 포함되어 있으면
                    answer++;
                    break;
                }
            }
        }
        System.out.println(answer);
    }
}

 

 

입력받은 단어를 집합S에 있는 단어들의 같은 인덱스의 알파벳끼리 비교한다.

알파벳이 비교해서 같으면 그 다음 인덱스의 알파벳을 비교하고, correct 변수를 증가시켜 correct 값이 입력받은 단어의 알파벳 개수와 같아지면 그 단어는 접두사이다.

알파벳을 비교했을 때 같지 않으면 입력받은 단어와 집합 S의 그 다음 단어를 비교하러 간다.

 

그냥 이렇게 correct변수를 만들어 인덱스로 비교해 풀었는데, 다른 풀이들을 보니 메서드를 통해서도 간단하게 풀 수 있었다.

앞으로 다양한 메서드들을 잘 활용해서 풀어봐야겠다.

 

 

 

equals, substring 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 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();

        int answer=0;
        while(m-- >0){
            String str= br.readLine();
            for(int i=0; i<n; i++){
                if(str.equals(s[i].substring(0, str.length()))){
                    answer++;
                    break;
                }
            }
        }
        System.out.println(answer);
    }
}

 

startsWith 사용 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 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();

        int answer=0;
        while(m-- >0){
            String str= br.readLine();
            for(int i=0; i<n; i++){
                if(s[i].startsWith(str)){
                    answer++;
                    break;
                }
            }
        }
        System.out.println(answer);
    }
}