문제

당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 거꾸로 읽는 걱정은 없다.

찾고자하는 문자열이 주어졌을 때 그 문자열을 포함하는 반지가 몇 개인지를 발견하는 프로그램을 작성하라.

 

 

조건 및 입출력

- 입력은 총 2 + N 줄 이다. 첫 번째 줄에는 1 자 이상 10 자 이하의 대문자로 구성된 찾고자 하는 문자열이 적혀있다. 두 번째 줄에는 반지의 개수 N (1 ≦ N ≦ 100)이 적혀있다. 2+i 줄(1 ≦ i ≦ N)엔 i개의 반지에 새겨져있고, 10 문자로 이루어진 문자열이 적혀있다.

- 찾고자하는 문자열을 포함 반지의 개수를 나타내는 정수를 한 줄로 출력하라.

- 시간 제한: 1초 / 메모리 제한: 128MB

 

 

코드 (Python 3)
import sys
input=sys.stdin.readline;

std=input().rstrip();
test=int(input());
result=0;

for i in range(test):
    check=input().rstrip();
    if(std in check*2):
        result+=1;

print(result);

 

 


여담

한 동안 잊고 있었다.

문자열에서 곱하기 연산자(*)를 쓰면 문자열이 n배로 늘어난다는 것을 말이다.

 

반지의 처음과 끝을 어떻게 처리해야 할지 몰랐다.

처음에는 if(std in check)만 했고, 이후 앞 뒤에 오는걸 어떻게 처리할지 고민이었는데,

 

누군가의 블로그를 보고 나의 빈약한 문법에 스스로 반성하게 된다.

다른 사람의 풀이를 참고해서 바로 check*2를 했더니, 정답 처리 되었다.

 

 

코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면 알려주세요 :)

+ Recent posts