[ 백준 ] 9996 - 한국이 그리울 땐 서버에 접속하지(with. JAVA)

SoyuliaSoyulia
2 min read

💡문제 분석 요약

-- 문제 --

입력 : 첫째 줄에 일의 개수 N이 주어진다. (1 ≤ N ≤ 100)

둘째 줄에는 패턴이 주어진다. 패턴은 알파벳 소문자와 별표(아스키값 42) 한 개로 이루어져 있다. 문자열의 길이는 100을 넘지 않으며, 별표는 문자열의 시작과 끝에 있지 않다.

다음 N개 줄에는 파일 이름이 주어진다. 파일 이름은 알파벳 소문자로만 이루어져 있고, 길이는 100을 넘지 않는다.

출력 : 총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다.

💡알고리즘 설계

  1. BufferedReader로 입력받기

  2. *기준으로 나눠서 배열 저장

  3. 입력받은 앞부분과 뒷부분이 배열[0] 과 [1]과 일치한지 확인

  4. 확인 후 결과 출력

💡시간복잡도

O(N)

💡틀린 이유

  1. 문자열 접근 방법

💡틀린 부분 수정 or 다른 풀이

package backjoon;

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

public class BackJoon9996 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String pattern=br.readLine();
        String[] patterns = pattern.split("\\*");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < N; i++) {
            String tmp = br.readLine();
            if (tmp.length() < pattern.length() - 1) {
                sb.append("NE\n");
                continue;
            }
            if (tmp.substring(0, patterns[0].length()).equals(patterns[0]) &&
                    tmp.substring(tmp.length() - patterns[1].length()).equals(patterns[1])) {
                sb.append("DA\n");
            }else {
                sb.append("NE\n");
            }
        }
        System.out.println(sb);
    }
}

💡느낀점 or 기억 할 정보

  1. ‘*’로 분리할 때 특수문자니까 \이용하기

  2. StringBuilder : String은 불변 ! 따라서 문자를 더하면 새로운 객체가 생성된다. 이를 해결하기 위해 StringBuilder 사용한다. 기존의 데이터를 이용하여 작업하기 때문에 속도가 빠르다.

0
Subscribe to my newsletter

Read articles from Soyulia directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Soyulia
Soyulia

Nice to meet u :) Im Backend Developer