티스토리 뷰

728x90

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

 

9996번: 한국이 그리울 땐 서버에 접속하지

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

www.acmicpc.net

 

저는 상당히 시간을 많이 쓰고도 틀렸는데,

문제를 잘 이해하면 허무하다 느낄 정도로 정말 쉽게 풀 수 있는 문제였습니다.

 

사이트에 나온 예제로 보겠습니다.

 

 

이 문제의 핵심은 셋째 줄부터 나오는 문자열들이 2번째 줄에 나와있는 문자열 형태로 변환될 수 있는가?입니다.

 

2번째 줄 문자열을 봅시다.

'*'를 기준으로 문자열이 2개가 나옵니다.

그리고 *을 기준으로 좌/우에 위치한 문자열은 가장 끝자리를 차지하게 됩니다.

 

2번째 줄 문자열 형식으로 나오기 위해선,

중간에 어떤 값이 나오던 상관없이 가장 끝자리만 일치하면 끝나는 문제입니다.

 

그래서 결론

1. 2번째 줄에 나온 문자열을 *을 기준으로 좌/우로 나눕니다.

2. 셋째줄 부터 나오는 문자열들의 끝값들을 2번째줄 좌/우 값과 비교합니다.

    일치한다면 같은 값이 될 수 있는 것이고, 아니면 무슨 짓을 해도 같은 값이 될 수 없습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;
 
public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        int N = sc.nextInt();
        String ori = sc.next();
        StringTokenizer st = new StringTokenizer(ori, "*");
 
        String a = st.nextToken();
        String b = st.nextToken();
 
        for (int i = 0; i < N; i++) {
            String s = sc.next();
            if (a.length() + b.length() > s.length()) {
                sb.append("NE" + "\n");
                continue;
            }
 
            String u = s.substring(0, a.length());
            String d = s.substring(s.length() - b.length(), s.length());
 
            if (u.equals(a) && d.equals(b)) {
                sb.append("DA" + "\n");
            } else {
                sb.append("NE" + "\n");
            }
 
        }
 
        System.out.println(sb);
 
        sc.close();
    }
 
}
cs

 

 

 

댓글