티스토리 뷰
Find a string
In this challenge, the user enters a string and a substring. You have to print the number of times that the substring occurs in the given string. String traversal will take place from left to right, not from right to left.
NOTE: String letters are case-sensitive.
Input Format
The first line of input contains the original string. The next line contains the substring.
Constraints
Each character in the string is an ascii character.
Output Format
Output the integer number indicating the total number of occurrences of the substring in the original string.
Sample Input
ABCDCDC
CDC
Sample Output
2
Concept
Some string processing examples, such as these, might be useful.
There are a couple of new concepts:
In Python, the length of a string is found by the function len(s), where is the string.
To traverse through the length of a string, use a for loop:
for i in range(0, len(s)):
print (s[i])
A range function is used to loop over some length:
range (0, 5)
Here, the range loops over 0 to 4. 5 is excluded.
문제해석
input값으로 string과 substring 2개가 입력된다. string에 substring이 몇 번이나 포함되어 있는지 체크하여 출력하면 된다. 샘플예제에서 string=ABCDCDC, substring=CDC 이렇게 입력되는데 CDC는 총 2번 나온다.
문제풀이
find() 함수는 첫 번째 일치하는 문자열의 위치를 리턴하기 때문에 몇 번 일치하는지 카운트값은 구할 수 없었다. 이 값을 구하려면 문제 컨셉에서 알려준 것처럼 for문을 사용하여 각 문자열을 체크해야 한다고 생각하였다. 그래서 아래 for문을 작성하였다.
for i in range(0, len(string)):
이제 for문 안에서 string의 각 문자가 찾을 문자열인 sub_string의 첫 번째 문자와 일치하는지 체크한다. 즉, 샘플의 ABCDCDC의 문자열에서 A, B, C, D, C, D, C 모든 문자를 순서대로 찾을 문자열인 CDC의 C와 일치하는지 체크하는 것이다.
if string[i] == sub_string[0]:
첫 번째 문자가 일치한 경우에는 string의 해당 위치부터 sub_string의 길이만큼의 문자열이 실제로 찾으려는 sub_string과 동일한지 체크한다. find() 함수의 경우 해당 문자열을 찾지 못한 경우에는 -1이므로 -1이 아닌 경우는 모두 일치하는 경우라 볼 수 있고 이 때에 counter 값을 1 증가시킨다.
if string.find(sub_string, i, i+len(sub_string)) != -1:
counter += 1
최종코드
def count_substring(string, sub_string):
string = string.replace(" ", "")
i = 0
counter = 0
for i in range(0, len(string)):
if string[i] == sub_string[0]:
if string.find(sub_string, i, i+len(sub_string)) != -1:
counter += 1
return counter
if __name__ == '__main__':
string = input().strip()
sub_string = input().strip()
count = count_substring(string, sub_string)
print(count)
Discussions
대체로 비슷하게 푼 것 같은데 아래 startswith() 함수를 사용한 예는 좀 더 간단해 보인다. startswith()는 문자열이 특정 값으로 시작할 경우 true를 반환한다. 즉, string에서 한 문자씩 뒤로 가면서 찾을 문자열로 시작하는지 체크하는 것이다.
def count_substring(string, sub_string):
count = 0
for i in range(len(string)):
if string[i:].startswith(sub_string):
count += 1
return count
'Programming > Python' 카테고리의 다른 글
[Python/Hackerrank] Strings > Text Alignment (0) | 2021.12.09 |
---|---|
[Python/Hackerrank] Strings > String Validators (0) | 2021.12.09 |
[Python/Hackerrank] Strings > Mutations (0) | 2021.12.08 |
[Python/Hackerrank] Strings > What's Your Name? (0) | 2021.12.08 |
[Python/Hackerrank] Strings > String Split and Join (0) | 2021.12.08 |
- Total
- Today
- Yesterday
- 매매일지
- string
- 동국알앤에스
- hackerrank
- DATABASE
- python3
- tensorflow
- python
- SQL Server
- 넷플릭스
- 코로나19
- 에코캡
- HK이노엔
- Weather Observation Station
- Tableau
- MSSQL
- 넥스트BT
- 대원화성
- 몰누피라비르
- TSQL
- 리비안
- 분석탭
- 경구치료제
- mysql
- insert
- list
- MS SQL Server
- 테슬라
- 미중무역전쟁
- 해커랭크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |