본문 바로가기

SWEA/D3

[SWEA 7675][D3][JAVA] 통역사 성경이

[문제]

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWqPvqoqSLQDFAT_&categoryId=AWqPvqoqSLQDFAT_&categoryType=CODE&&&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

 

[풀이방법]

 

간단한 문자열 문제입니다. 문장의 개수가 주어지지만 구두점을 기준으로 문장의 끝을 나눠야 하기 때문에 문자열을 탐색하면서 처리했습니다. 

 

구두점 ( . ! ?) 이 나오면 문장의 끝이므로 그때의 index를 저장하고 문자열을 substring으로 구했습니다.

한 문장에는 여러 개의 단어가 나올 수 있으므로 공백을 기준으로 split 한 다음 이름을 찾는 규칙

  • 이름은 대문자 알파벳으로 시작하며 나머지는 소문자 알파벳인 단어들이다. 
  • 예외적으로, 단어의 마지막이 구두점일 경우에도 이름이며, 대문자 한글자도 이름이다.

에 맞추어서 첫 번째 문자가 대문자이고 그 다음 문자들이 소문자이거나 구두점으로 끝나는 경우에는 이름의 개수를 세는 result 변수를 1만큼 증가시켜줬습니다. 

 


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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
 
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuffer sf = new StringBuffer();
        
        int t = Integer.parseInt(st.nextToken());
        
        for (int tc = 1; tc <= t; tc++) {
            st = new StringTokenizer(br.readLine());
            
            int n = Integer.parseInt(st.nextToken());
            
            String s = br.readLine();
            
            sf.append("#" + tc + " ");
            
            int idx_end = 0;
            int idx_start = 0;
            
            int res= 0;
            int cnt = 0;
            for (int i = 0; i < s.length(); i++) {
                idx_start = idx_end;
                if (s.charAt(i) == '?' || s.charAt(i) == '!' || s.charAt(i) == '.') {
                    //한 문장의 끝 
                    idx_end = i+1//이 인덱스부터는 다음 문장의 시작이다.
                    res = 0//한 문장에서 나오는 이름의 개수를 구해야하기 때문에 초기화 
                    cnt++;
                }
                
                if (idx_start < idx_end) {
                    String tmp = s.substring(idx_start, idx_end).trim(); // 한 문장을 가져와야 한다. 
                    
                    String[] words = tmp.split(" ");
                    
                    for (int j = 0; j< words.length; j++) {
                        //이름 규칙에 따라이름의 개수를 가져온다. 
                        /*
                         * 이름은 대문자 알파벳으로 시작하며 나머지는 소문자 알파벳인 단어들이다.
 
                        예외적으로, 단어의 마지막이 구두점일 경우에도 이름이며, 대문자 한글자도 이름이다.
                         */
                        if ('A' <= words[j].charAt(0&& words[j].charAt(0<= 'Z') {
                            //첫 글자가 대문자일 때 
                            //나머지 글자가 모두 소문자일 경우나 한 글자인 경우에는이름 
                            //마지막이 구두점이어도 된다. 
                            if (words[j].length() == 1) res++;
                            else {
                                boolean ok = true;
                                int end_idx = 0;
                                for (int k = 1; k < words[j].length(); k++) {
                                    if (!('a' <=  words[j].charAt(k) && words[j].charAt(k) <= 'z')) {
                                        ok = false;
                                        end_idx = k;
                                        break;
                                    }
                                }
                                if (end_idx == words[j].length()-1 && (words[j].charAt(end_idx) == '?' || words[j].charAt(end_idx) == '!' || words[j].charAt(end_idx) == '.') ) {
                                    ok = true;
                                }
                                if (ok) res++;
                            }
                        }
                        
                    }
                    sf.append(res + " ");
                    
                }
                
            }
            sf.append('\n');
        }
        System.out.println(sf.toString());
    }
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs