구현 - 백준 1152

경운·2일 전
0

코딩테스트

목록 보기
12/13
post-thumbnail

BOJ/자바 1152 - 단어의 개수

백준 1152 - 단어의 개수

1. 문제 분석

문제 이해

영어 대소문자와 공백으로 이루어진 문자열이 주어짐
단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 함

입력

  • 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열 / 문자열 길이는 1,000,000을 넘지 않기
  • 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다
  • 문자열은 공백으로 시작하거나 끝날 수 있다

출력

  • 첫 줄에 단어의 개수를 출력

2. 시간 복잡도

  • 길이가 N인 문자열을 한 번 읽어야 함으로 -> O(N)
  • countTokens()를 사용함으로써 토큰의 개수를 반환하기만 하므로 -> O(1)

가장 많은 시간이 소요되는 문자열의 길이에 비례하므로 해당 문제의 시간 복잡도는 O(N)


3. 코드 구현

import java.io.*;
import java.util.StringTokenizer;

public class No_1152 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		System.out.print(st.countTokens());
	}
}

StringTokenizer

StringTokenizer 클래스는 문자열을 사용자가 지정한 구분자로 쪼개주는 클래스
쪼개어진 문자열은 토큰이라고 부른다

1. 생성자 (Constructor)

  • StringTokenizer(String str) : 문자열을 공백을 기준으로 분리

2. nextToken()

  • String nextToken() : 문자열에서 다음 토큰을 가져옴

3. hasMoreTokens()

  • boolean hasMoreTokens() : 분리할 토큰이 더 남아 있는지 확인
    남아있으면 true, 없으면 false를 반환

4. countTokens()

  • countTokens() : 남아있는 토큰의 개수를 반환

0개의 댓글