본문 바로가기

백준/브론즈 탈출하기

[Java] 백준 1152번 : 단어의 개수

 

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

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

출력

첫째 줄에 단어의 개수를 출력한다.

 

접근 방법 

1) 공백 개수+1로 단어 개수 계산

2) 입력 받은 문자열에 공백 있는지 확인

3) trim() 사용해서 문자열 앞뒤 공백 제거

4) 빈 문자열만 입력됐을 경우와 구분,  count=0 출력

 

 

제출 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		String sentence = input.trim();
		int count=0;

		if(sentence.isEmpty()) 
			System.out.print(count);
		else {
			for(int i=0; i<sentence.length(); i++) {
				if(sentence.charAt(i) ==' ') {
					count++;
				}
			}
			System.out.print(count+1);
		}
	}

}

 

 

더 나아가기

오답 코드1

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String sentence = sc.nextLine();
		int count=0;
		
		for(int i=0; i<sentence.length(); i++) {
			if(sentence.charAt(i) ==' ') {
				count++;
			}
		}
		System.out.print(count+1);
	
	}

}

- 처음에 sc.next();로 입력 받아서, 문자 개수만큼 count가 찍혔었음 -> sc.nextLine()으로 변경

- 문자열 앞뒤로 공백 입력될 경우, 이 공백까지 count됨 -> trim

 

 

오답코드2

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String input = sc.nextLine();
		String sentence = input.trim();
		int count=0;
		
		for(int i=0; i<sentence.length(); i++) {
			if(sentence.charAt(i) ==' ') {
				count++;
			}
		}
		System.out.print(count+1);
	
	}

}

- 빈 문자열만 입력 됐을 경우 공백이 카운트 되어 단어 개수가 1로 표시됨

  -> if(isEmpty()) / else로 빈 문자열이 입력되는 경우를 고려하여 조건문 작성하여 해결