단어의 개수 (1152) 풀이

2023. 6. 20. 09:53BaekJoon/문자열

문제내용

사용자에게 문자열을 입력받아 문자열에서 공백을 기준으로 몇개의 단어가 있는지 계산해 출력하는 문제이다.


풀이

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String s = br.readLine();
		int result = 0;
		try {
			String[] splitString = s.split(" ");
			result = splitString.length;
			for(int i = 0; i < splitString.length; i++){
				if(splitString[i].equals("")) result -= 1;
			}
			
		} catch (ArrayIndexOutOfBoundsException e) {
			result = 0;
		}
		
		
		bw.write(result+"");
		bw.write("\n");
		bw.flush();
		bw.close();
	}
}

사용자에게 문자열을 입력받기 위해 BufferedReader를 사용해 s에 입력받았다.

단어 개수를 저장할 result변수를 선언 및 초기화를 시키고 문자열에서 제공하는 spilt 메소드를 이용해 공백을 기준으로 잘라 문자열 배열 splitString에 저장했다.

먼저 단어 개수는 문자열 배열 splitString의 크기로 재할당시키고 for문을 통해 만약 자른 단어의 내용이 텅빈문자열이라면 단어의 개수를 1개씩 차감했다.

만약 공백만이 입력이 되는 경우를 대비해 catch문을 이용해 단어의 개수를 0으로 재할당 시켜줬다.

마지막으로 출력하기 위해 BufferedWriter를 사용해 출력했다.


겪었던 문제

백준을 풀면서 문제를 제일 많이 틀리고 가장 많이 고민했던 문제인 것 같다. 처음엔 문자열 자체로만 풀려고했지만 실패했다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String s = br.readLine();
		int result = 0;
		int index = s.indexOf(" ");
		if(index != -1){
			if(index == 0) result = 1; else result = 2;
			while(true){
				if(s.indexOf(" ", index+1) != -1){
					result++;
					index = s.indexOf(" ", index+1);
				}else {
					break;
				}
			}
			if(index == s.length()-1) result--;
		}
		
		bw.write(result+"");
		bw.write("\n");
		bw.flush();
		bw.close();
	}
}

이런식으로 문자열에서 제공하는 indexOf를 사용해 풀려고했지만 처음에 들어오는 문자열이 비었는지, 처음과 끝에 공백이 오는지 등의 처리를 모두 해주는것은 비효율적이라고 생각했다. 여기서 구글링을 통한 검색을 했다면 쉽게 풀 수 있었겠지만 오직 내 지식으로만 풀고싶었기 때문에 고민고민했지만 결국 실패한 코딩이 됐다. 아직 실력을 부족하고 알아가야할 지식이 넘쳐난다.. 노오력이 부족한 것이겠지..😂

 

'BaekJoon > 문자열' 카테고리의 다른 글

다이얼 (5622) 풀이  (0) 2023.06.20
상수 (2908) 풀이  (0) 2023.06.20
문자열 반복 (2675) 풀이  (0) 2023.06.16
알파벳 찾기 (10809) 풀이  (0) 2023.06.16
숫자의 합 (11720) 풀이  (2) 2023.06.16