백준 16968번 차량 번호판1

조한빈·2020년 9월 18일
0

자바 알고리즘

목록 보기
1/8

링크텍스트

문제에서 주어진 내용

  1. 숫자 10개 0 to 9
  2. 문자 26개 a to z
  3. 숫자판의 길이는 4
  4. 입력 시 c는 문자 / d는 숫자
  5. 같은 문자, 숫자 반복 불가

접근 방법


1. dd 를 입력받았을 때는 숫자 두자리로 이루어진 번호판이 생성된다.
2. 차량번호판은 "01,09,24,12"와 같은 식으로 이루어질 것이다.
3. [0 to 9][0 to 9] <= 이렇게말이다.
4. 그렇다면 경우의 수는 10*10 = 100 가지가 된다.
5. 하지만! "5. 같은 문자, 숫자 반복 불가"라는 조건을 생각해보자
6. 11,22,33,44,55 등이 안된다는 소리다
7. 만약 앞자리가 1이라면 뒤에 올 수 있는 숫자는? 1을 제외한 0,2,3,4,5,6,7,8,9이다.
8. 만약 앞자리가 2라면 뒤에 올 수 있는 숫자는? 2를 제외한 0,1,3,4,5,6,7,8,9이다.
9. 차량 번호판의 첫번째 숫자의 경우의 수는? 0 to 9로 10가지이다.
10. 차량 번호판의 두번째 숫자의 경우의 수는? 첫번째 숫자를 제외한 9가지이다.
// 문자의 경우의 수는 26개로 위와 같은 방식이다.

코드 구현

import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] carN = sc.next().toCharArray();
		int ans = 1;
		for (int i = 0; i < carN.length; i++) {
			if (i == 0) { 
            // 첫번째 숫자의 경우의 수
				if (carN[i] == 'c') {
					ans *= 26;
				} else {
					ans *= 10;
				}
			} else {
            //두번째 숫자부터의 경우의 수
				if (carN[i] == carN[i - 1]) 
					if (carN[i] == 'c') {
						ans *= 25;
					} else {
						ans *= 9;
					}
				}
				else {
					if (carN[i] == 'c') {
						ans *= 26;
					} else {
						ans *= 10;
					}
				}
			}
		}
		System.out.println(ans);
	}
}

0개의 댓글