본문 바로가기
DEV/백준 알고리즘

백준 알고리즘 1152번(파이썬)

by 올커 2022. 10. 8.

 

백준 1152번_파이썬 알고리즘

Q. 백준 1152. 단어의 개수

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
(1) 입력 : 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

(2) 출력 : 첫째 줄에 단어의 개수를 출력한다.


A. 풀이

 - 이 문제의 중점 요소는 공백을 기준으로 단어의 숫자를 세는 개념으로 풀이한다.

# Q 백준 1152. 단어의 개수
instr = list(input())
cnt = 1

for i in range(len(instr)):
    if instr[i] == ' ':
        cnt += 1

if instr[0] == ' ' and instr[-1] == ' ':
    cnt -= 2
elif instr[0] == ' ' or instr[-1] == ' ':
    cnt -= 1

print(cnt)

 

1) 변수 선언부

 - 문자를 입력받고 각각의 문자를 리스트의 요소로 넣는다. 변수명은 instr로 한다.

 - 각 단어의 수를 세기 위해서 cnt 변수를 생성한다. cnt변수의 값을 1로 둔 이유는 앞 뒤 공백이 없는 완전한 문장이 있을 경우 항상 공백의 수보다 단어의 수가 1 더 많기 때문이다.

   (ex. A B C D, 문자4개, 공백3개)

 

2) 반복문(for문)

 - for문을 통해 instr 리스트의 요소를 따라 반복한다.

 - 문자를 구분짓는 것은 공백 ' '이다. 이 공백(' ')이 있다면 cnt에 하나를 더한다.

 

그러나 여기서 유의해야 하는 점이 있다. 공백(' ')이 맨 처음이나, 끝에 가있을 경우이다.

3) 조건문(if문)

 - 조건문에서는 위의 문제를 검사하고 cnt를 다시 계산한다.

 - 먼저 맨 처음 문자가 공백(' ')이고, 마지막 문자도 공백인 경우, 단어의 수를 2번 더 센 셈이므로 cnt에서 2를 빼주기 위해 cnt-=2를 계산해준다.

 - 위의 조건이 아닐 경우(elif) 맨 처음 문자 또는 맨 마지막 문자가 공백(' ')일 경우, 단어의 수를 1번 더 센 셈이므로 cnt에서 1을 빼주기 위해 cnt-=1을 계산해준다.

 

4) 출력(print문)

 - print()문을 사용하여 cnt를 출력한다.


R. 리뷰

 - 문제에 대한 고민과 이해가 알고리즘을 푸는 데 가장 중요하다는 생각이 항상 든다.

반응형

댓글