새소식

⌨️ Algorithms/백준

[Python] 백준 5555번_반지

2023. 5. 19. 20:39

  • -

https://www.acmicpc.net/problem/5555

 

5555번: 반지

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

www.acmicpc.net

 

  • 당신은 N개의 반지를 가지고 있음
  • 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있음
  • 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있음
  • 반지에 각인된 문자열을 거꾸로 읽는 걱정은 없음
  • 찾고자하는 문자열이 주어졌을 때 그 문자열을 포함하는 반지가 몇 개인지를 발견하기
  • 입력
    • 입력은 총 2 + N 줄
    • 첫 번째 줄에는 1 자 이상 10 자 이하의 대문자로 구성된 찾고자 하는 문자열이 적혀있음
    • 두 번째 줄에는 반지의 개수 N (1 ≦ N ≦ 100)이 적혀있음
    • 2+i 줄(1 ≦ i ≦ N)엔 i개의 반지에 새겨져있고, 10 문자로 이루어진 문자열이 적혀있음
  • 출력
    • 찾고자하는 문자열을 포함 반지의 개수를 나타내는 정수를 한 줄로 출력
  • 시간 제한: 1초
  • 메모리 제한: 128 MB

 

"""
입출력 예시)

(예제 입력 1) 
ABCD
3
ABCDXXXXXX
YYYYABCDXX
DCBAZZZZZZ
            -> 2

(예제 입력 2) 
XYZ
1
ZAAAAAAAXY
            -> 1

(예제 입력 3) 
PQR
3
PQRAAAAPQR
BBPQRBBBBB
CCCCCCCCCC
            -> 2
"""
# (예제 입력 2) 
# -> 반지의 문자열의 시작과 끝이 연결되어 있기 때문에 'ZAAAAAAAXY'에 'XYZ'가 포함됨

 

 

## 의사코드 ##

# 문자열의 길이부터 0까지 역순으로
# for i in range(len(string), 0, -1):
      # 반지에서 (10 - (i-1))인 값의 인덱스부터 끝까지 + 반지의 처음부터 (문자열의 길이 - i)인 값의 인덱스까지 
#     if ring[10-(i-1):] + ring[:len(string)-i] == string:
#         cnt += 1

 

 

 

 

string = input()
n = int(input())
cnt = 0 # 찾고자하는 문자열이 포함된 반지의 개수
for _ in range(n):
    ring = input()
    # 찾고자하는 문자열이 원래 반지에 포함되어 있으면 개수 + 1
    if string in ring:
        cnt += 1
    else:
        # 문자열의 길이부터 0까지 역순으로
        for i in range(len(string), 0, -1):
            # 반지에서 (10 - (i-1))인 값의 인덱스부터 끝까지 + 반지의 처음부터 (문자열의 길이 - i)인 값의 인덱스까지 
            if ring[10-(i-1):] + ring[:len(string)-i] == string:
                cnt += 1
    print(cnt)

 

 

-> 틀림

 

 

 

 

string = input()
n = int(input())
cnt = 0 # 찾고자하는 문자열이 포함된 반지의 개수
for _ in range(n):
    ring = input()
    # 반지를 하나 더 연결
    ring += ring
    for i in range(20):
        if string == ring[i:len(string)+i]:
            cnt += 1
            break
print(cnt)

 

 

-> 처음부터 반지를 하나 더 연결해서 인덱스로 슬라이싱

 

 

  • 과정 확인
"""
찾고자 하는 문자열: YZA
개수: 0 

반지: ZAAAAAAAXY
연결된 반지: ZAAAAAAAXYZAAAAAAAXY 

ring[i:len(string)+i]: YZA
개수: 1 

1
"""

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!