-
백준 1152번 단어의 개수알고리즘 문제풀이/Java 2020. 4. 5. 20:03
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1 복사
The Curious Case of Benjamin Button
예제 출력 1 복사
6
예제 입력 2 복사
Mazatneunde Wae Teullyeoyo
예제 출력 2 복사
3
예제 입력 3 복사
Teullinika Teullyeotzi
예제 출력 3 복사
2
해설
처음 문제를 접했을 때, 문제가 엄청 쉬운데 왜 정답률이 26퍼일까 의문이 들었었다. 사실 엄청 어려운 문제는 아니다.(bronze 3으로 측정되었으니...)
근데 지엽적이라 해야할까 개념이 미숙하면 틀리기 쉬운 문제인 건 맞다.
다음은 문제의 코드이다.
import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); line = line.trim(); String[] result = line.split(" "); System.out.println(result[0].equals("") ? 0 : result.length); } }
상당히 간단하다. 문제의 풀이에서 가장 중요한 건 공백의 처리방식이다. trim 메서드를 통해 문자열의 맨 앞과 끝의 공백을 제거해 주었고, 이후에 split(" ")을 통해 공백 단위로 문자열을 쪼갰는데, 여기서 처음에 틀렸었다.
만약 문자열이 공백(" ")이라면, 이를 split 메서드를 거치면 result에는 무엇이 저장될까?
더보기답은 ""이다.
중요한 건 split이라는 메서드는 구분자를 통해서 분할을 한다는 것이다. 구분자를 제거하고 나면 ""이 존재한다는 걸 잊지말자.
느낀 점
- split 메서드를 사용할 때, 공백을 분할하면 어떻게 되는 지는 생각해 본 적이 없었는데, 이건 꼭 기억해둬야 할 것 같다.
'알고리즘 문제풀이 > Java' 카테고리의 다른 글
알고스팟 Boggle (0) 2020.04.06 백준 1010번 다리 놓기 (0) 2020.04.06 백준 1233번 주사위 (0) 2020.04.05 백준 1076번 저항 (0) 2020.04.05 [프로그래머스 Level 1] 문자열 내 마음대로 정렬하기 (0) 2020.04.03