Baekjoon

백준 1152번 단어의 개수(Python, Java)

백엔드 규니 2020. 1. 15. 16:12
728x90
반응형

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.

www.acmicpc.net

 

 

문제를 보자마자 너무 쉽다고 생각을 했고, 단순히 공백문자만 처리를 잘 해주면 될 것 같아서 바로 풀기를 시작했다.

근데 나중에 더 쉬운 방법이 있을까 하고 검색을 해보다 보니 내가 정말 멍청하다는 것을 깨달았다.

 

 

 

1. 단어의 개수 with 파이썬

1
2
3
4
5
6
7
8
9
10
11
12
name = input()
 
= list(name.split(" "))
count = 0
 
for i in range(len(l)):
    if l[0== "":
        del l[0]
    elif l[len(l)-1== "":
        del l[len(l)-1]
 
print(len(l))
 

 

나도 이렇게 풀이를 길게 풀었다.  split 함수는 ( ) 안에 자기가 원하는 기준으로 문자열을 나눌 때 쓰는 함수이다. 괄호 안에 아무것도 없다면 공백을 기준으로 나누게 된다. 하지만 나는 좀 충격받았다. 왜냐하면

 

1
2
3
4
= input().split()
print(n)
print(len(n))
 
 

 

이렇게 3줄이면 문제를 풀 수 있다는 것이다. 처음에 이게 가능한가?  생각하고 코드를 보았다. 근데 생각해보면 split 이 공백을 기준으로 문자열을 나누는 함수이다. 입력을 받을 때도 공백을 기준으로 단어를 나누기 때문에 저렇게만 하면 되는 것이다. 소름..

 

 

2. 단어 공부 with Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
 
public class Word {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
 
        String s = input.nextLine();
        String[] p = s.split(" ");
        int count = 0;
        for (int i = 0; i < p.length++i) {
            if (p[i].equals("")) {
                continue;
            }
            else {
                count++;
            }
        }
        System.out.println(count);
    }
}
 
 
 

 

String 을 비교할 때 계속 == 을 사용해서 안되길래 도대체 왜 안되는건가 해서 시간이 좀 오래걸렸다. 근데 String 비교는 equals 를 사용해야 한다고 해서 적용하니 바로 맞았다. 그리고 하나 더 시간이 걸렸던건 공백을 "" 로 하냐 " " 로 하는거의 문제였는데 "" 이것으로 하니 정답이 된다. 

반응형