알고리즘/알고리즘 공부(JAVA)

알고리즘_백준_1152_단어의 개수 Using_By(Java)

소소한필통 2022. 8. 29. 23:50

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

 

1152번: 단어의 개수

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

www.acmicpc.net

설명, input, output은 아래와 같다.

이 문제의 중요한 점은 한 줄을 읽어와서 띄어쓰기로 나눠져 잇는 단어를 세는 것이다.

문제 해결 방법

1. Scanner을 이용해서 nextLine으로 한줄을 읽고 앞뒤 trim을 통해서 앞뒤 공백을 없앤다.

2. if문을통해서 공백인 곳과 공백이 아닌것을 나눈다.

3. 공백이 아닌 곳에 split(" ")을 통해서 띄어쓰기로 단어를 나누고 그 단어의 갯수를 length를 통해서 파악한다.

 

import java.util.Scanner;

public class Backjoon_1152 {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
	
    // 한 라인을 읽어온 후 trim을 통해서 빈 공백을 제거한다.
    String s = sc.nextLine().trim();
	
    // 공백으로 올 때 0을 주기 위해서 if문으로 걸러준다
    if (s.isEmpty()) {
      System.out.println(0);
    } else {
   	  // s를 띄어쓰기로 split을 하고 split한 값의 길이를 들고온다.
      System.out.println(s.split(" ").length);
    }
  }
}

 

두번 째 풀이 방법이다.

StringTokenizer을 이용해서 분리 기준을 공백으로 지정해주면 공백을 기준으로 나뉘어 토큰에 저장해주는 것이다.

이 방법은 처음과 마지막의 공백에 대해 별다른 예외 처리를 안해줘도 되니 매우 편리한 방법이다.

import java.util.Scanner;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
 
		String S = sc.nextLine();
		sc.close();
 
		// st 에 공백을 기준으로 나눈 토큰들을 st 에 저장한다
		StringTokenizer st = new StringTokenizer(S," ");
		
		// countTokens() 는 토큰의 개수를 반환한다
		System.out.println(st.countTokens());	
		
	}
 
}