문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 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로 빈 문자열이 입력되는 경우를 고려하여 조건문 작성하여 해결
'백준 > 브론즈 탈출하기' 카테고리의 다른 글
[Java] 백준 : 10250번 ACM 호텔 문제 (0) | 2023.11.18 |
---|---|
[Java] 백준 2588번 : 곱셈 (0) | 2023.11.16 |
[Java] 백준 2884번 : 알람시계 (1) | 2023.11.13 |
[Java] 백준 2475번 : 검증수 (0) | 2023.11.10 |
[Java] 백준 25083번 : 새싹 (0) | 2023.11.02 |