알고리즘 문제(SOL)

[백준/파이썬/16968] 차량 번호판 1

https://www.acmicpc.net/problem/16968

 

16968번: 차량 번호판 1

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

www.acmicpc.net

Problem

  • 상도시의 차량 번호판 형식이 주어졌을 때, 가능한 차량 번호판의 개수를 구해보자.

조건

  • 번호판에 사용할 수 있는 숫자는 0, 1, 2, ..., 8, 9이다.
  • 사용할 수 있는 문자는 a, b, c, d, ..., y, z이다.
  • 차량 번호판의 형식은 최대 4글자이고, c와 d로 이루어진 문자열로 나타낼 수 있다.
  • c는 문자가 위치하는 자리, d는 숫자가 위치하는 자리이다.
  • 같은 문자 또는 숫자가 연속해서 2번 나타나면 안 된다.

SOL

 

최대 4글자이고, 같은 문자 또는 숫자가 연속해서 2번 나타내면 안되는 문제이다.

조건이 간단하면서도, 막상 구현하려면 생각을 하게되는 문제이다.

 

이러한 문제들은, 예시를 들어가면서 이해하는게 편하다.예를들어, dddd 가 들어온다면, 10*9*9*9 가지가 있을거다. cddc가 온다면? 26*10*9*26 가지가 있을거다.

 

순서도를 간략하게 말로 설명하면, 아래와 같이 될거다!

 

"c"로 시작한다면, 26, "d"로 시작한다면 , 10을 셋팅해주고,

  • 뒤에 붙는게 앞의 글자와 다르다면, d냐 c냐에 따라서, 26,10을 곱해주고,
  • 뒤에 붙는게 앞의 글자와 같다면, d냐 c냐에 따라서, 25,9를 곱해주게 된다.
#번호판 형식이 주어졌을때, 가능한 번호판의 개수
import sys
input= sys.stdin.readline

car_num=input().rstrip()
digit=10
alphabet=26

if len(car_num) ==1:
    if car_num[0] =="c":
        print(26)
    else:
        print(10)
    exit(0)

if car_num[0]=="c":
    total = 26
else:
    total=10

for i in range(1,len(car_num)):
    if car_num[i] !=car_num[i-1]:
        if car_num[i]=="d":
            total*=digit
        elif car_num[i]=="c":
            total*=alphabet
        continue
    if car_num[i-1] =="d":
        total*=(digit-1)
        continue
    if car_num[i-1] =="c":
        total*=(alphabet-1)
        continue

print(total)