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씩 증가되어 최종 개수가 저장되는 형식이다.