오늘도 자기전에 한문제를 풀려고 했는데
switch 문에서 항목을 나누다가 어디선가 실수를 했는지 계속 이상한 부분으로 간다..
그래서 그냥 쉬운거라도 하나 풀고 자려고 이거 풀었다.
문제를 보자
‘a’와 ‘b’가 번갈아 나오는 길이 L인 문자열이 있다. L = 5이면 “ababa”이고, L = 7이면 “abababa”이다.
홀수 L이 주어질 때, ‘a’와 ‘b’가 번갈아 나오는 길이 L인 문자열에서,
길이가 2이상인 연속한 부분문자열이 회문(앞으로 읽어도 뒤로 읽어도 같은 문자열)인 것의 개수를 구하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
테스트 케이스의 첫 번째 줄에는 하나의 정수 L (3 ≤ L ≤ 109) 이 주어진다. L은 홀수이다.
[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
각 테스트 케이스마다 길이가 2이상인 연속한 부분문자열이 회문인 것의 개수를 출력하라.
이 문제만 읽어서는 문제를 어떻게 풀어야 할지 감이 잘 안잡혔다. 얼핏 봐서는 펠린드롬 문제인 줄 알았는데
인풋이 3이상인 홀수고 출력이 1,4,9다
머리속으로 생각을 해보니
3의 경우
aba
5의 경우
ababa인데
aba, bab, aba, ababa 총 4개
9의 경우
aba, bab, aba, bab, aba,,
ababa,babab,ababa,babab,
ababababa
총 9개다
입력이 N이라고 하면 결과는 (N-1)/2의 제곱임을 알 수 있다.
그래서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> using namespace std; int main() { cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false); int TC,N; long long ANS; cin>>TC; for (int t=1;t<=TC;t++) { cin>>N; long long temp = (N-1)/2; cout<<"#"<<t<<' '<<temp*temp<<'\n'; } return 0; } | cs |
아주 간단한 코드가 완성되었다.
8673. 코딩 토너먼트1 D3 (0) | 2020.01.12 |
---|---|
8934. 팰린드롬 공포증 D4 (0) | 2020.01.08 |
9088. 다이아몬드 D4 (0) | 2020.01.05 |
8993. 하지 추측 D4 (0) | 2020.01.04 |
9229. 한빈이와 Spot Mart D3 (0) | 2020.01.03 |
댓글 영역