-
[SWEA] 2007. 패턴 마디의 길이 c++Coding Test/SW Expert Academy 2022. 11. 15. 09:40728x90
- 문제
패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라.
[제약 사항]
각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다.
[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)- 문제 해결
1. substr를 이용해서 마디 검사를 한다.
2. 인덱스로 접근하기 때문에 out of range를 방지하기 위해 인덱스 검사도 추가하였다.
tmp.substr(i, i) : i 부터 i개 까지의 문자열
tmp의 길이가 10, i가 6 이라면 → tmp.substr(6, 6) 으로 out of range 에러가 발생한다.
#include<iostream> #include <string> using namespace std; int main(int argc, char** argv) { int test_case; int T; cin>>T; for(test_case = 1; test_case <= T; ++test_case) { string str(""); cin >> str; string pattern(""), tmp(""); for(int i = 2; i < str.size(); i++){ pattern = str.substr(0,i); if(2 * i <= str.size()){ tmp = str.substr(i, i); } if( pattern == tmp){ cout << "#" << test_case << " " << pattern.size() << endl; break; } } } return 0; }
728x90'Coding Test > SW Expert Academy' 카테고리의 다른 글
[SWEA] 1984. 중간 평균값 구하기 c++ (0) 2022.11.15 [SWEA] 1989. 초심자의 회문 검사 c++ (0) 2022.11.15 [SWEA] 2001. 파리 퇴치 c++ (0) 2022.11.15 [SWEA] 2005. 파스칼의 삼각형 c++ (0) 2022.11.15 [SWEA] 1859. 백만 장자 프로젝트 c++ (0) 2022.11.14