일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- db
- data structure
- 감상문
- 운영체제
- SW Expert Academy
- D2
- Computer Science
- algorithm
- c++
- algogritim
- swea
- LeetCode
- 네트워크
- 데이터베이스
- D3
- language
- 문제풀이
- 법의학
- BOJ
- OS
- Programmers
- 프로그래머스
- 알고리즘
- 재테크/투자
- 자료구조
- Database
- network
- 독서
- 백준
- cs
Archives
- Today
- Total
선택은 나의 것
[SWEA] 7853 오타 본문
문제
SWEA 7853 : 오타
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
접근
재경이는 i번째 문자에 i - 1번째 문자 또는 i번째 문자 또는 i + 1번째 문자를 칠 수 있다.
따라서 [i - 1], [i], [i + 1]이 모두 다른 단어로 이뤄져 있으면 i번째에 위치할 문자의 경우의 수는 3이 된다.
[i - 1], [i], [i + 1] 중 두 문자가 같다면 경우의 수는 2가 되며 셋 다 같을 경우는 1이 된다.
따라서 i번째에 위치할 문자의 경우의 수를 계속 곱해나가면 된다.
여기서 0번째 문자는 i - 1번째 문자가 없기 때문에 i번째와 i + 1번째 문자만을 보면 되고, 마지막 문자는 i - 1번째와 i번째 문자만을 봐주면 된다.
그리고 출력 시에 답에서 10억7로 나눈 나머지를 출력하라는 조건이 있다.
이때 for문을 돌며 경우의 수를 전부 곱해나간 뒤 마지막 출력 시에만 %10억7을 해주면 당연히 overflow가 날 수밖에 없다. 가능한 경우의 수의 최댓값은 3^1000 - 2이기 때문이다.
곱할 때마다 %1000000007로 나눠주면서 계산해나가야 한다.
코드
// algorithm study
// SWEA_[D3]7853_오타
#include <iostream>
#include <vector>.
using namespace std;
int main() {
int test_case;
cin >> test_case;
for (int t = 0; t < test_case; t++) {
string s;
cin >> s;
long long answer = 1, chk = 1;
for (int i = 0; i < s.size(); i++) {
if (i == 0) {
if (s[i] == s[i + 1])
chk = 1;
else
chk = 2;
} else if (i == s.size() - 1) {
if (s[i - 1] == s[i])
chk = 1;
else
chk = 2;
} else {
if (s[i - 1] == s[i] && s[i] == s[i + 1] && s[i - 1] == s[i + 1])
chk = 1;
else if (s[i - 1] == s[i] || s[i] == s[i + 1] || s[i - 1] == s[i + 1])
chk = 2;
else
chk = 3;
}
answer *= chk;
answer %= 1000000007;
}
cout << "#" << t + 1 << " " << answer << "\n";
}
return 0;
}
'☽ Algorithm > SWEA' 카테고리의 다른 글
[SWEA] 1948 날짜 계산기 (0) | 2020.05.14 |
---|---|
[SWEA] 1946 간단한 압축 풀기 (0) | 2020.05.14 |
[SWEA] 8104 조 만들기 (0) | 2020.05.13 |
[SWEA] 7732 시간 개념 (0) | 2020.05.13 |
[SWEA] 7087 문제 제목 붙이기 (0) | 2020.05.13 |
Comments