백준 1152번 단어의 개수(Python, Java)
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()
l = 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
|
n = 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 를 사용해야 한다고 해서 적용하니 바로 맞았다. 그리고 하나 더 시간이 걸렸던건 공백을 "" 로 하냐 " " 로 하는거의 문제였는데 "" 이것으로 하니 정답이 된다.