Algorithm/brute force
[백준] 알고리즘 16968번 - 차량 번호판1문제
낭강
2021. 8. 28. 17:23
문제
https://www.acmicpc.net/problem/16968
16968번: 차량 번호판 1
00부터 99까지 총 100가지 중에서 00, 11, 22, 33, 44, 55, 66, 77, 88, 99가 불가능하다.
www.acmicpc.net
소스코드
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include<memory.h>
#include <stdio.h>
using namespace std;
string s;
int ans;
int go(string s,int index,char last) {
if (index == s.size()) return 1;
char start = (s[index] == 'c' ? 'a' : '0');
char end = (s[index] == 'c' ? 'z' : '9');
int ans = 0;
for (int i = start; i <= end; i++) {
if (i != last) {
ans += go(s, index + 1, i);
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
cin >> s;
cout<<go(s, 0, ' ');
}
해설
이전에 올 수 있는게 문자인지 숫자인지 판별한 후 문자 문자일경우 이전의 값을 저장시켜둬서 같은 문자가 연결되면 안되므로, 다를때마다 재귀를 돌려서 index값이 s와 길이가 같을경우 1을 리턴하여 모든 경우의 개수를 셀 수 있다.
리턴1은 cc라고 입력이 들어왔을 경우
a b -> 1리턴
a c -> 1리턴
이런식으로 쭉 반복됨으로써
ans에 1씩 증가되어 최종 개수가 저장되는 형식이다.