[백준] : 1152번 - 단어의 개수 - JAVA
2024. 11. 15. 15:42 - DoosanBaek
내 풀이
문제 분석:
- 주어진 문자열에서 단어의 개수를 센다. 문자열은 영어 대소문자와 공백으로 되어있고, 공백으로 단어를 구분. 최대 길이는 1,000,000이다.
제약 조건:
- 문자열의 길이는 1,000,000을 넘지 않는다.
- 단어는 공백 한개로 구분되며 공백이 연속해서 나오는 경우는 없다.
- 문자열은 공백으로 시작하거나 끝날 수 있다.
의사결정:
- 입력받은 문자열에서 양쪽의 공백을 제거한다.
- 공백 문자를 기준으로 문자열을 분리하여, 단어들을 배열에 저장한다.
- 배열의 길이를 출력하여 단어의 개수를 센다.
- 메모리와 시간 효율성을 고려 할때, 불필요한 객체 생성을 피한다.
- StringBuilder는 오히려 메모리에 안좋게 불필요한 객체 생성을 하므로 간단하게 System.out.println()을 사용하여 값을 바로 출력 한다.
package com.doosane.study01.week01.day3.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* StringBuilder를 사용햇을때 오히려 메모리 효율이 떨어지는 이유는 ?
* -> sb.append(words.length);
* System.out.println(sb.toString()); -> StringBuilder에 값을 추가한 후에 이를 문자열로 변환할때 변환 작업이 추가로 되면서
* 간단한 문자열 조작에는 오히려 적합하지 않다.
*
*/
/*
문제 분석
- 단어의 개수를 세어 출력
제약 조건
-
의사 결정
- 메모리와 시간 효율성을 고려 할 때, 불필요한 객체 생성을 피하는 것이 좋다.
- StringBuilder 사용을 피하고, 단순히 System.out.println()을 사용하여 값을 바로 출력하는 방식으로 한다.
- BufferdReader로 입력 문자열을 readLine()을 이용해 읽어온다.
- 문자열 word에서 양 끝의 공백을 제거한 후, 문자열이 비어 있는지 확인한다.
- 비어있다면, 단어의 개수가 0 이므로, 0을 출력한다.
- 비어있지 않다면, 공백을 기준으로 문자열을 분리하여 단어 배열을 만들고, 그 배열의 길이(단어 개수)를 출력한다.
*/
public class BOJ1152 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine();
br.close();
printWord(word);
}
static void printWord(String word) {
if (word.trim().isEmpty()) {
System.out.println(0);
} else {
String[] words = word.trim().split("\\s+");
System.out.println(words.length);
}
}
}
/*
메모리 54808 KB
시간 376 ms
*/
/*
오버 헤드
public class BOJ1152 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String word = br.readLine();
br.close();
printWord(word);
}
static void printWord(String word) {
StringBuilder sb = new StringBuilder();
if (word.trim().isEmpty()) {
sb.append(0);
} else {
String[] words = word.trim().split("\\s+");
sb.append(words.length);
}
System.out.println(sb.toString());
}
}
*/
/*
메모리 55656 KB
시간 400 ms
*/
'알고리즘' 카테고리의 다른 글
[백준] 27160번 : 할리갈리 - JAVA (0) | 2024.11.16 |
---|---|
[백준] 29701번 : 모스 부호 -JAVA (0) | 2024.11.16 |
[백준] 2605번 : 줄 세우기 -JAVA (0) | 2024.11.16 |
[백준] 2908번 : 상수 -JAVA (2) | 2024.11.15 |
[백준] 26041번 : 비슷한 전화번호 표시 - JAVA (0) | 2024.11.15 |
[백준] 2675번 : 문자열 반복 - JAVA (1) | 2024.11.15 |
[백준] 9184번 : 신나는 함수 실행 - JAVA (0) | 2024.11.14 |
[백준] 10994번 : 별 찍기 - JAVA (0) | 2024.11.14 |