250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)7853. 오타 본문
728x90
반응형
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문자열의 앞뒤를 비교해야한다.
for문을 이용해 s.size()만큼 반복한다.
우선 인덱스가 0이거나 s.size() - 1인 경우 문자가 2개만 비교하기 때문에 if를 이용해 따로 처리하도록 한다.
두 개의 문자가 같은지 비교하여 같지 않은 경우는 ans에 2를 곱하도록 한다.
위의 경우가 아닌 경우는 세 개의 문자를 비교하면 된다.
세 개의 문자가 같은 경우는 continue,
두 개의 문자가 같은 경우는 ans * 2를 곱,
모두 다른 경우는 ans * 3을 해주면 된다.
각 곱마다 10억 + 7로 나눈 나머지를 해야 코드가 돌아갈 것이다..!
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main(void)
{
int t;
cin >> t;
for(int tc = 1; tc <= t; tc++)
{
string s;
long long ans = 1;
cin >> s;
for(int i = 0; i < s.size(); i++)
{
if(i == 0)
{
if(s[i] != s[i + 1])
ans = (ans * 2) % (long long)(1e9 + 7);
}
else if(i == s.size() - 1)
{
if(s[i] != s[i - 1])
ans = (ans * 2) % (long long)(1e9 + 7);
}
else
{
if(s[i - 1] == s[i] && s[i] == s[i + 1])
continue;
else if((s[i - 1] == s[i] && s[i] != s[i + 1]) || (s[i + 1] == s[i] && s[i - 1] != s[i]) || (s[i - 1] == s[i + 1] && s[i] != s[i + 1]))
ans = (ans * 2) % (long long)(1e9 + 7);
else
ans = (ans * 3) % (long long)(1e9 + 7);
}
}
cout << "#" << tc << " " << ans << endl;
}
return 0;
}
728x90
반응형
'SW Expert Academy' 카테고리의 다른 글
(SWEA c++)2819. 격자판의 숫자 이어 붙이기 (0) | 2021.09.30 |
---|---|
(SWEA c++)7964. 부먹왕국의 차원 관문 (0) | 2020.12.02 |
(SWEA c++)7732. 시간 개념 (0) | 2020.12.01 |
(SWEA c++)7728. 다양성 측정 (0) | 2020.11.30 |
(SWEA c++)7532. 세영이의 SEM력 연도 (0) | 2020.11.25 |