반응형
문제
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한
www.acmicpc.net
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int cnt = 0;
line = line.trim(); // 문자열 앞뒤 공백 제거
if(line.isEmpty()) { //공백만 입력된 경우
System.out.println("0");
} else {
String[] arr = line.split(" "); // 공백을 기준으로 문자를 잘라서 arr배열에 저장
System.out.println(arr.length);
}
sc.close();
}
}
코드 설명
문자열 공백 관련 문제.
문자열 앞뒤 공백을 제거해야 하고 공백 하나만 입력되었을 시 예외처리도 해 주어야 한다. 예외처리 없이는 기본 1로 출력됨.
if(line.isEmpty()) { //공백만 입력된 경우
System.out.println("0");
} else {
String[] arr = line.split(" "); // 공백을 기준으로 문자를 잘라서 arr배열에 저장
System.out.println(arr.length);
}
공백만 입력되었을 시 0을 출력하고, 아니라면 문자를 공백 기준으로 나누어 저장한 배열의 크기를 출력한다.
마무리
아무 생각없이 arr배열 길이 출력하는 코드만 작성해서 제출했다가 틀림 판정받고 멘붕 받아서 검색해보니 공백만 입력하는 경우도 처리해야 한다고 해서 공백 처리 함수들 여기저기 뒤져보다가 isEmpty() 함수를 써보았더니 성공적으로 정답 인정받았다.
추가로
String[] arr = line.split("\\s+");
System.out.println(arr.length);
위와 같이
"\\s+"
이용하면 여러 개의 공백 및 탭을 처리할 수 있다. (출처: https://okky.kr/article/117730 Kenny 님 답변)
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준|C++] 1712: 손익분기점 (0) | 2021.08.31 |
---|---|
[백준|자바] 5622: 다이얼 (0) | 2021.08.28 |
[백준|자바] 2908: 상수 (0) | 2021.08.28 |
[백준|자바] 1157: 단어 공부 (0) | 2021.08.27 |
[백준|자바] 2675: 문자열 반복 (0) | 2021.08.26 |
[백준|자바] 11809: 알파벳 찾기 (0) | 2021.08.26 |