문제분석
입력받은 10개의 문자열 중에서 찾으려는 문자열이 한번이라도 있는 지를 확인하는 문제이다. 유념해야 하는 부분은 입력받은 10개의 문자열을 처음과 뒤가 이어져 있는 반지라고 가정한다는 점이다. 또한 찾으려는 문자열이 한번이라도 나오면 카운트 한다는 점을 알면 좀 더 쉽게 풀 수 있다.
코드
k = input()
n = int(input())
ans = 0
for _ in range(n):
s1 = input()
s = s1 * 2
for i in range(len(s)):
if k==s[i:i+len(k)]:
ans += 1
break
print(ans)
문제풀이
찾으려는 문자열, 반지의 개수를 입력받고 반지에 적힌 문자열을 입력받는다. 중요한 점은 반지의 처음과 끝이 이어져 있기 때문에 입력받은 문자열에 *2를 해준다는 점이다. 만약 문제에서 반지에서 찾으려는 문자열이 총 몇번 등장하느냐를 묻는다면 이러한 방법이 중복을 제거할 수 없기 때문에 문제가 될 수 있지만, 문제에서는 반지에서 찾으려는 문자열이 한 번이라도 등장하면, 카운트를 하고 다음으로 넘어가기 때문에 이러한 방법을 사용할 수 있다. 이러한 방식으로 찾으려는 문자열의 길이만큼 if 문을 만들어 for 문을 통해 완전탐색을 해준다. 한 번이라도 문자열이 카운트가 되면 for 문을 탈출하여 다음 문자열로 넘어가줘야 중복 카운트가 되지 않는다. 이런식으로 반지의 개수만큼 탐색을 해준 뒤에 마지막으로 카운트한 변수 ans를 출력해주면 된다.
'Koala - 6기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 11053 가장 긴 증가하는 부분 수열 (0) | 2022.03.16 |
---|---|
[BOJ/python] 1978번 소수 찾기 (0) | 2022.03.13 |
[백준 /Python] 1969번: DNA (0) | 2022.03.13 |
[백준/C++] 15664번 N과 M (10) (0) | 2022.03.07 |
코딩 테스트 준비 스터디 출석부 (0) | 2022.03.06 |