본문 바로가기
Python/코딩테스트

[Python] 백준 1152번- 단어의 개수

by @sseyeon_ 2021. 1. 25.
반응형

www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net

 

문제

영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

 

 

풀이

 

[실패 코드]

string = input()
string = string.split(' ')
if string[0] == '' or string[-1]=='':
    string = list(set(string))
    string.remove('')
print(len(string))

처음엔 앞 뒤 공백의 경우만 생각을 해서 

리스트 중복 제거로 풀어나갔다.

 

따라서, 집합 set으로 합쳤다가, remove() 함수를 이용해 공백만 추가로 제거해주면 된다고 코드를 짰다.

 

하지만 이는 같은 단어가 여러번 등장할 때 하나만 있는 것으로 판단하기에 틀린 코드 !! 

 

 

📌 리스트 값 중복 제거하기 (집합 자료형 set)

 

set에는 2가지 큰 특징이 있다.

  1. 중복을 허용하지 않는다.
  2. 순서가 없다(Unordered).

set 자료형을 이용해 리스트의 중복을 제거
다시 list 형식으로 변환하기

 

 

 

 

 

[성공 코드]

string = input()
string = string.split(' ')
while (True):
    if '' not in string:
        break
    string.remove('')
print(len(string))

 

  1. split(' ') → 공백을 기준으로 문자열을 나누어 리스트에 저장
  2. while문을 돌려 배열 안에 공백 여부를 확인한다. (not in)
  3. remove('값')을 통해 공백을 하나하나 지워간다.

 

 

 

반응형