Coding Feature.

백준) 16968번: 차량 번호판 1 in C 본문

코딩테스트/백준 solved.ac

백준) 16968번: 차량 번호판 1 in C

codingfeature 2023. 7. 4. 21:30

Problem

 

16968번: 차량 번호판 1

00부터 99까지 총 100가지 중에서 00, 11, 22, 33, 44, 55, 66, 77, 88, 99가 불가능하다.

www.acmicpc.net

solution.

 

For each character, the number of cases is calculated by dividing the cases between the same or different cases compared to the previous character. For example, case 1: …XX and case 2: …XY.

Let’s take “cccc” as an example. Starting from the first character, it is clear that the number of cases is 26, from a to z. However, with the second character and the rest, there is redundancy.

For the second character, redundancy only occurs with one character, so the number of cases would be 26 * (26 - 1), where minus 1 is for the redundant character.

For the third character, one might think to multiply by 24, since we multiplied by 25 for the second character. However, since we only care about redundancy happening right beside one another, we should multiply it again by 25 and not 24. It does not matter that the first and third characters are the same.

So, if we continue this process, the final answer would be 26 * 25 * 25 * 25.

 

code.

#include <stdio.h>
#include <string.h>

int main(){
	char str[4];
	int ans = 1;
	scanf("%s", str);
	
	// calculate first character of string.
	if(str[0] == 'c')
		ans *= 26;
	else if(str[0] == 'd')
		ans *= 10;
	
	// calculate the rest, starting from second char.
	for(int i = 1; i<strlen(str); i++){
		if(str[i] == 'c'){ // char.
			if(str[i-1] == 'c') // and is redundant. ..cc
				ans *= 25;
			else // not redundant, ..dc
				ans *= 26;
		}
		else if(str[i] == 'd'){ // decimal
			if(str[i-1] == 'd') // and is redundant. ..dd
				ans *= 9;
			else // not redundant, ..cd 
				ans *= 10;
		}
	}
	
	printf("%d\n", ans);
	return 0;
}