말하는 컴공감자의 텃밭

백준 1152 단어의 개수 <브론즈 2> - 자바 StringTokenizer 본문

알고리즘/Backjoon - Java

백준 1152 단어의 개수 <브론즈 2> - 자바 StringTokenizer

현콩 2023. 7. 18. 15:53
728x90

백준 1152 단어의 개수 자바
공백 고려 필수

 

보자마자 Split 쓰거나 CharAt으로 공백 구분하면 되겠는데 했다.

양쪽 공백은 trim으로 없앤 후 배열에 넣어서 크기를 내면 답이겠네~ 했다.

 

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.util.Scanner;
public class Main{
    public static void main(String[] args){
        //input
        Scanner sc = new Scanner(System.in);
        String S;
        int cnt = 0// count
        S = sc.nextLine();
        
        //logic
        for(int i = 0; i < S.length(); i ++){    // 모든 공백 확인
            if(S.charAt(i) == ' '){
                cnt++;
            }
        }
        if(S.charAt(0!= ' ' && S.charAt(S.length()-1!= ' '){
            cnt = cnt + 1// 앞 뒤에 공백이 없다면 " " + 1해야 단어의 수
        }
        if(S.charAt(0== ' ' && S.charAt(S.length()-1== ' '){ 
            cnt = cnt - 1// 앞 뒤가 공백이라면, -1 해야 단어의 수
        }                   // 앞 또는 뒤에 하나씩 공백이 있다면 cnt 그대로
        
        //output
        System.out.println(cnt);
        
    }
}
cs

charAt으로도 간단했는데 다른사람은 뭐로 풀었다 검색해보다가 StringTokenizer이라는 메소드를 찾았다.

문자열을 구분자로 쪼개주는 클래스인데 token으로 구분짓는다고 한다.

 

>> StringTokenizer

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.StringTokenizer;
 
public class TokenizerExample {
    public static void main(String[] args) {
        String sentence = "Hello, how are you today?";
        StringTokenizer tokenizer = new StringTokenizer(sentence, ", ");
 
        while (tokenizer.hasMoreTokens()) {
            String token = tokenizer.nextToken();
            System.out.println(token);
        }
    }
}
 
cs

이런식으로 작성하면

 

Hello
how
are
you
today?

이렇게 쪼개준다.

물론 복잡한걸 사용하려면 split()를 사용하는게 좋다고 한다.

 

GPT한테 슥 물어보니

  1. StringTokenizer(String str, String delim)
    • 토큰화할 지정된 문자열 str과 토큰을 구분하는 데 사용되는 구분 기호(들) delim을 사용하여 StringTokenizer 객체를 생성하는 생성자.
  2. 부울 hasMoreTokens()
    • 문자열에 사용 가능한 토큰이 더 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  3. 문자열 nextToken()
    • 문자열에서 다음 토큰을 반환합니다.
  4. int countTokens()
    • 문자열에 남아 있는 토큰의 수를 반환합니다.
  5. 부울 hasMoreElements()
    • 이 메소드는 hasMoreTokens()와 동일하며 StringTokenizer가 구현하는 Enumeration 인터페이스를 이행하기 위해 제공됩니다.
  6. 객체 nextElement()
    • 이 메서드는 nextToken()과 동일하며 Enumeration 인터페이스를 이행하기 위해 제공됩니다.

해당 클래스로 작성하면

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;
 
public class Main {
    public static void main(String[] args){
        //input
        Scanner sc = new Scanner(System.in);
        String S = sc.nextLine();
        sc.close();
               
        //logic
        
        StringTokenizer st = new StringTokenizer(S, " "); 
        
        //output
            System.out.print(st.countTokens());
     
    }
}
cs

간결.. 해.

 

간단한 문제면 활용할 수 있을 듯 싶다.

728x90
Comments