※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 16969번 문제인 차량 번호판 2이다.
문제는 아래 링크를 확인하자.
16969번: 차량 번호판 2
00부터 99까지 총 100가지 중에서 00, 11, 22, 33, 44, 55, 66, 77, 88, 99가 불가능하다.
www.acmicpc.net
이 문제는 경우의 수를 계산하는 문제이다.
숫자 또는 문자가 연속으로 올 경우, 그 연속된 부분문자열의 2번째부터는 전체 가능한 문자에서 바로 이전에 온 문자가 올 수 없으니 1을 뺀 값을 곱해야한다는 점을 신경쓰자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using std::cin; using std::cout;
using std::string;
int main()
{
string s; cin >> s;
int slen = s.length();
long long ans = 1;
char before = 'a';
for (int i = 0;i < slen;i++) {
if (s[i] == 'c') {
ans *= (before == 'c') ? 25 : 26;
before = 'c';
}
if (s[i] == 'd') {
ans *= (before == 'd') ? 9 : 10;
before = 'd';
}
ans %= 1000000009;
}
cout << ans;
return 0;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6588 // C++] 골드바흐의 추측 (0) | 2021.04.05 |
---|---|
[BOJ 16922 // C++] 로마 숫자 만들기 (0) | 2021.04.04 |
[BOJ 1948 // C++] 임계경로 (0) | 2021.04.02 |
[BOJ 6549 // C++] 히스토그램에서 가장 큰 직사각형 (0) | 2021.04.01 |
[BOJ 1693 // C++] 트리 색칠하기 (0) | 2021.03.31 |