백준 1152번 단어의 개수 - 자바

728x90

www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한

www.acmicpc.net


 

브론즈 2 등급의 문제지만 엄청 간단한 문제입니다.

 

첫 줄에 문자열을 입력받습니다. 이 문자열은 대소문자로 된 영단어가 입력되는데, 구분은 공백으로 구분됩니다.

주의해야 할 점공백은 연속으로 나오지는 않지만 공백이 문자의 앞뒤에 있을 수도 있다는 것 입니다.

공백을 기준으로 단어들을 잘라서 그 단어들의 개수를 출력하면 되는 알고리즘 입니다.

 

두 방식으로 풀어 보았습니다.

 

1. StringTokenizer를 사용

2. trimsplit 사용

 

두 방식 다 입력은 Scanner로 입력받았습니다.

 

---------------------------------------------첫 번째 방법 (StringTokenizer 사용)---------------------------------------------

import java.util.Scanner;
import java.util.StringTokenizer;

class Main {  
  public static void main(String args[]) { 
    Scanner sc = new Scanner(System.in);
    String S = sc.nextLine();
    StringTokenizer st = new StringTokenizer(S," ");
    int n = st.countTokens();
    System.out.println(n);
    // while(st.hasMoreTokens()){
    //   System.out.println(st.nextToken());
    // }
    
  } 
}

 

 

--------------------------------------------첫 번째 방법 (trim(), split() 사용 사용)--------------------------------------------

import java.util.Scanner;

class Main {  
  public static void main(String args[]) { 
    Scanner sc = new Scanner(System.in);
    String S = sc.nextLine().trim(); 
    System.out.println(S.split(" ").length);    
  } 
}

 

 

먼저 첫 번째 방법부터 설명드리겠습니다.

etc-image-0

먼저 사용을 위해 import를 받습니다.

etc-image-1

스캐너는 사용하여 첫 째줄을 변수 S 에 입력받습니다.

etc-image-2

문자열이 들어간 S를 공백(" ")을 기준으로하여 StringTokenizer 사용하여 토큰을 생성합니다.

StringTokenizer는 세번 째 인자로 true 와 false를 받을 수 있는데 기본값은 false입니다.

true로 하였을 경우는 두번 째 인자에 사용된 값을 토큰으로 포함할지 안할지를 정하는 인자입니다.

false이므로 공백을 기준으로 토큰을 생성하지만 공백은 토큰으로 만들지 않습니다.

 

etc-image-3

int countTokens() 메소드는 StringTokenizer에서 제공하는 메소드입니다.

토큰의 개수를 가져옵니다.

공백을 기준으로 만들어진 토큰의 개수를 가져옵니다.

개수를 출력해주면 됩니다.

 

etc-image-4

토큰에 생성된 값들이 궁금하면 출력해보시면 됩니다.

hasMoreTokens()토큰이 남아있는지 안남아있는지 검사하는 메소드이고

nextToken()는 다음 토큰을 가져오는 것입니다.

 

 

두 번째 방법을 설명드리겠습니다.

기본 자바 String에서 제공하는 라이브러리여서 import 할 필요가없습니다.

etc-image-5

입력을 위해 스캐너만 import 해줍니다.

etc-image-6

스캐너를 생성합니다.

라인을 읽어 변수 S에 넣는데, 여기서 trim()을 사용합니다.

trim()은 공백을 제거해줍니다. 

하지만, 문자사이에 있는 공백은 제거해주지 않습니다. 

앞 뒤에 공백만 제거해주는 것 입니다.

 

etc-image-7

앞 뒤 공백이 제거된 문자열에 split으로 " " 기준으로 자릅니다. 

이때 length를 사용하여 개수를 가져올 수 있습니다.

개수를 바로 출력해주면 됩니다.

 

 

 

1152번 단어의 개수 문제는 자바의 라이브러리를 사용하면 간단하게 풀 수 있는 문제였습니다.

 

알고리즘에는 정답이 없습니다. 

이런 풀이도 있구나하고 생각해주시면 감사하겠습니다.

반응형