1) 사이트
2) 문제
문제는 그림과 같이 문장 안에 몇 개의 단어가 있는지 세는 문제이다.
까다로운 점은 단지 스페이스의 개수로 세면 답은 절대 나오지 않는다 ^^
왜냐하면 the와 curious 사이의 스페이스가 2개이면 답이 7로 나오기 떄문이다 .
정답률이 약 28퍼에 달하는 극악의 난이도 ... ? 절대 극악 아님... 쉽다
아래에서 확인해보자!
3) 파이썬 코드
sentance=input()
sentance=list(sentance.lstrip())
sentance.append(" ")
index=0
result=0
for a in sentance:
if ord(a)>=65 and ord(a)<=123 and len(sentance)-1>index:
if sentance[index+1] == " ":
result=result+1
index=index+1
print(result)
3-1) 선수 지식
파이썬 코드를 이해하기 위해 알아야 할 선수 지식이 있습니다.
1. 문자열을 리스트로 바꾸는 법
-> list(문자열)
2. 아스키코드
a는 97, A는 65이다.(b는 98 ....) 즉 아스키코드 65부터 123까지는 소문자 대문자 영역이다.
문자를 아스키코드로 바꾸려면 ord()
3. 리스트에 새로운 아이템을 추가하는 방법
->리스트.append("추가할 문자")
4. 문자열 양 끝 공백 지우기
->strip() : 가장 왼쪽과 가장 오른쪽의 공백 지우기
->lstrip() : 가장 왼쪽의 공백 지우기
->rstrip() : 가장 오른쪽의 공백 지우기
5. 리스트 길이 계산하기
->len(문자열)
3-2) 설명
1. 문자열을 받고 리스트형으로 변환한다. 리스트로 변환할 때 왼쪽 공백만 지워준다.
(왼쪽 공백만 지워주는 이유는 아래의 등장)
sentance=input()
sentance=list(sentance.lstrip())
2. 맨 오른쪽에 공백을 하나 채워준다.
sentance.append(" ")
3. a~z, A~Z (아스키코드 65~123)중 문자가 나온 다음 " " 띄어쓰기가 나온다면 결과값에 1을 추가해준다.
즉, 띄어쓰기 다음 띄어쓰기가 나온다고 해도 결과에 추가해주지 않는다는 의미이다.
때문에 맨 왼쪽 공백만 지운 것이고, 오히려 맨 오른쪽 공백은 넣어준 것이다.(맨 오른쪽 공백이 없을 때를 대비하여...)
index=0
result=0
for a in sentance:
if ord(a)>=65 and ord(a)<=123 and len(sentance)-1>index:
if sentance[index+1] == " ":
result=result+1
index=index+1
주의점은 리스트 크기를 고려해야한다는 것이다.
sentance리스트 크기를 고려해 len(sentance)-1 만큼의 index크기만 들어가게 한다. (sentance(index)를 고려한 방식)
4. 결과를 출력한다
print(result)
4) c언어 코드
아직~
오늘도 1시간 투자해가며 한 개 풀기 성공!
1일 1코딩 실천하자!
끝!
'알고리즘 > 백준' 카테고리의 다른 글
5622번 다이얼 (0) | 2021.05.23 |
---|---|
2908번 상수 (0) | 2021.05.19 |
1157번 단어 공부 (0) | 2021.05.10 |
2675번 문자열 반복 (0) | 2021.04.26 |
10809번 알파벳 찾기 (0) | 2021.04.25 |