728x90
SMALL
백준 문제 풀이: 5555 [반지]
문제 링크: https://www.acmicpc.net/problem/5555
문제 설명:
반지 문자열과 특정 문자열이 주어졌을 때, 반지 문자열을 두 번 이어붙인 뒤 특정 문자열이 포함되는지를 확인합니다. 여러 개의 반지 문자열 중 특정 문자열이 포함된 반지의 개수를 출력합니다.
문제 해결 코드
// 백준 5555 - 반지
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
string target; // 찾을 문자열
cin >> target;
int n; // 반지 개수
cin >> n;
int count = 0; // 포함된 반지 개수
while (n--) {
string ring;
cin >> ring;
// 반지 문자열을 두 번 이어붙임
ring += ring;
// 이어붙인 문자열에 target이 포함되면 count 증가
if (ring.find(target) != string::npos) {
count++;
}
}
cout << count << '\n'; // 결과 출력
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 반지 문자열을 두 번 이어붙여서 원형 문자열의 순환을 처리합니다.
find
함수로 이어붙인 문자열에 특정 문자열이 포함되는지 확인합니다.
- 구현 세부사항:
- 반지 문자열의 원형성을 처리하기 위해
ring += ring
을 사용하여 문자열을 두 번 이어붙입니다. find
는 특정 문자열이 포함된 위치를 반환하며, 포함되지 않은 경우string::npos
를 반환합니다.
- 반지 문자열의 원형성을 처리하기 위해
- 시간 복잡도 분석:
- 반지 문자열 길이를
m
, 찾을 문자열 길이를k
라 할 때,find
의 복잡도는 O(m). - 반지가
n
개 주어지므로 전체 시간 복잡도는 O(n ⋅ m).
- 반지 문자열 길이를
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 브루트포스' 카테고리의 다른 글
백준 2003번 [수들의 합 2](C++) -yes6686- 티스토리 (2) | 2024.09.02 |
---|---|
백준 1051번 [숫자 정사각형](C++) -yes6686- 티스토리 (0) | 2024.08.14 |
백준 1543번 [문서 검색](C++) -yes6686- 티스토리 (0) | 2024.07.31 |
백준 1254번 [팰린드롬 만들기](C++) -yes6686- 티스토리 (1) | 2024.07.23 |
백준 31287번 [장난감 강아지](C++) -yes6686- 티스토리 (0) | 2024.07.21 |