상세 컨텐츠

본문 제목

JAVA. 백준 알고리즘 단계별 문제 7단계(문제 번호 2941)

공-부/백준 알고리즘

by 사랑짱 2021. 6. 6. 14:14

본문

(문제번호 2941)

단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력하는 프로그램을 작성하시오.

(+. 목록에 없는 알파벳은 한 글자씩 센다.)

 

 

문제 해결 포인트

크로아티아 알파벳을 대체하는 문자를 하나의 문자로 인식하여  카운트해야한다.

단순히 replce( ) 함수로 하나의 문자로 대체한 뒤 길이를 출력하는 방법과

문자열을 순차적으로 체크하여 크로아티아 알파벳을 구분하는 방법이 있다.

하지만 전자의 경우, 객체가 반복적으로 생성되므로 메모리적으로 낭비가 생긴다는 단점이 있다.

 

 

문제 해결 과정

첫번째, replace( )로 크로아티아알파벳을 하나의 문자로 대체하기

1.  BufferedReader를 이용하여 크로아티아 알파벳으로 이루어져있는 단어를 입력 받는다.

2. replace함수를 이용하여 크로아티아 알파벳을 대체하는 하나의 문자('A')로 치환한다.

3. 치환된 단어의 길이를 출력한다.

 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class No09_1 {
 
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        
        str = str.replace("c=""A").
                  replace("c-""A").
                  replace("dz=""A").
                  replace("d-""A").
                  replace("lj""A").
                  replace("nj""A").
                  replace("s=""A").
                  replace("z=""A");
 
        System.out.println(str.length());
        
    } //main
    
}    //class
 
cs

 

 


 

두번째, 조건문에 의해 순차적으로 카운트하기

1.  BufferedReader를 이용하여 크로아티아 알파벳으로 이루어져있는 단어를 입력 받는다.

2. 입력받은 단어의 길이를 len 변수와 문자의 길이를 체크하는  count 변수를 정의한다.

3. charAt( )를 통해 인덱스에 해당하는 문자를 추출한다.

4. 조건식에 따라 크로아티아 알파벳을 찾아 count 한다.

   ch = 'c' ------> '='  또는 '-' 인지 확인

   ch = 'd' ------> 'z'  또는 '-' 인지 확인 ------> 'z'이면 '='인지 확인

   ch = 'l' ------> 'j' 인지 확인

   ch = n' ------> 'j' 인지 확인

   ch = 's' ------> '=' 인지 확인

   ch = 'z' ------> '=' 인지 확인

  (이때, 뒤에 문자가 이어진 크로아티아 알파벳인 경우, index 확보를 위해 조건을 추가해야 한다.)

5. count를 출력하여 크로아티아 알파벳의 개수를 출력한다.

 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class No09_2 {
 
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String str = br.readLine();
        int len = str.length();
        int count = 0;
        
        for(int i = 0; i < len; i++) {
            char ch = str.charAt(i);
            
            if(ch == 'c' && i < len-1) {    //c= 또는 c-일 경우
 
                if(str.charAt(i+1== '=' || str.charAt(i+1== '-') {
                    i++;
                }
            } 
 
            else if(ch == 'd' && i < len-1) { //dz= 또는 d-일 경우
 
                if(str.charAt(i+1== '-') {
                    i++;
                } 
                else if(str.charAt(i+1== 'z'&& i < len-2) {                
                    
                    if(str.charAt(i+2== '=') {
                        i+=2;
                    }
                    
                }
            }
            
            else if( (ch == 'l' ||ch == 'n')&& i < len-1) {    //lj일 경우, nj일 경우
                
                if(str.charAt(i+1=='j') {
                    i++;
                }
            }
            
            else if((ch == 's'||ch == 'z')&& i < len-1) {  //s=일 경우, z=일 경우
 
                if(str.charAt(i+1=='=') {
                    i++;
                }
            }    //if-else if-else
 
            count++;
 
        }    //for
        
        System.out.println(count);
        
    }    //main
    
}    //class
cs

 

 

관련글 더보기