※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 16969번 문제인 차량 번호판 2이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/16969

 

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

+ Recent posts