Algorithm/Baekjoon

[Baekjoon] 백준 1152 단어의 개수 - java

담크 2021. 7. 21. 23:56

오늘은 문자열에서 브론즈 2 문제인 단어의 개수 문제를 풀어보려 합니다.

이번 문제는 처음에 생각 없이 풀어봤는데 실패라고 뜨길래 뭘 실수했지 곰곰이 생각해보게 되는 문제였던 거 같아요

어떤 문제인지 문제 풀러 가보겠습니다.

문제는

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

 

1152번: 단어의 개수

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.


문제풀이

package Baek;

import java.util.Scanner;

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

 

이번 문제의 경우 제가 문자열의 맨 앞에 공백이 있을 경우를 깜빡하고 코딩을 한 결과 당연히 실패로 나왔던 겁니다.... 하하..... (처음엔 charAt( )으로 풀려고 했으나 이후 바꿨습니다.)

우선 가장먼저 처음부터 맨 앞 뒤의 공백을 trim()을 써서 지우고 시작했습니다.

두 번째로 isEmpty를 써서 문자열의 길이가 0인 경우 true를 리턴해서 0을 출력시켰습니다.

그 이외일 때는 split함수를 사용해 공백(" ")을 기준으로 문자열을 나누어서 그 length를 리턴 시켰습니다.

 

이렇게 했더니 겨우 성공이 뜨더라구요 정답 비율이 왜 29.025%인가 해서 봤는데 문제만 잘 읽었으면 아마 정답률이 조금 더 올라가지 않았나 생각해봅니다.

 

 

아 Scanner가 편해서 최근에 계속 Scanner만 사용했는데 확실히 성능이 떨어지는 게 눈에 보이는 것 같아요 ㅜㅜ

그래서 앞으로는 연습도 할 겸 BufferedReader를 사용해서 문제를 풀어보도록 하겠습니다.