💻 Problem
당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 거꾸로 읽는 걱정은 없다.
찾고자하는 문자열이 주어졌을 때 그 문자열을 포함하는 반지가 몇 개인지를 발견하는 프로그램을 작성하라.
✏️ Solution 1
import sys
input = sys.stdin.readline
find = input().rstrip()
n = int(input())
length = len(find)
cnt = 0
for _ in range(n):
ring = input().rstrip()
for i in range(len(ring)):
target = ''
if i > len(ring) - length:
target = ring[i:] + ring[:(i + length) % len(ring)]
else:
target = ring[i:i + length]
if find == target:
cnt += 1
break
print(cnt)
보이는 그대로 직관적으로 풀었다.
index를 하나씩 살펴가며 find 문자열을 찾았고, 만약 target이 반지 길이를 넘어가게 되면 두 문자열을 따로 계산한 후 합쳤다.
target과 find가 일치하면 해당 반지는 탐색을 종료했다.
✏️ Solution 2
import sys
input = sys.stdin.readline
find = input().rstrip()
n = int(input())
cnt = 0
for _ in range(n):
ring = input().rstrip()
if find in ring * 2:
cnt += 1
print(cnt)
다른 사람들 풀이를 보니 이렇게 풀 수도 있었다..
반지가 두 배라면 반지의 시작과 끝이 연결된 형태라는 점을 고려하지 않아도 된다.
그저 find 문자열이 반지 * 2 안에 존재하는지 if문 하나만 작성하면 된다.
반응형
'Algorithm > 백준 (BOJ)' 카테고리의 다른 글
[Python] 백준/BOJ 7576번: 토마토 (Gold 5) (0) | 2025.02.01 |
---|---|
[Python] 백준/BOJ 1012번: 유기농 배추 (Silver 2) (0) | 2025.01.31 |
[Python] 백준/BOJ 28913번: 최애의 팀원 (Silver 3) (0) | 2025.01.28 |
[Python] 백준/BOJ 23757번: 아이들과 선물 상자 (Silver 2) (0) | 2025.01.27 |