algorithm

[JAVA] 백준 알고리즘 16968번 (차량 번호판 1)

Dev:P 2022. 2. 20. 17:22
반응형

문제


이번에 다뤄볼 문제는 16968번 문제 '차량 번호판'입니다.

문제에서 연습해야 하는key-point는 경우의 수 입니다.

 

주어진 조건들을 보면 조금 복잡해 보일 수 있습니다. 하지만 결국 우리가 수학시간에 종종 풀던 모든 경우의 수의 개수를 구하는 문제라고 생각하면 아주 쉽게 문제를 해결할 수 있습니다.

 

우선 입력으로는 c,d 로 구성된 문자열이 주어집니다. 이때 c는 문자가 위치하는 자리임을 뜻하고 d는 숫자가 위치하는 자리임을 뜻합니다. 즉, c = 알파벳 26가지 / d = 숫자 9가지의 경우의 수를 갖게 됩니다. 예를들어 cd가 입력되었다면 문제의 해답인 모든 경우의 수는 26*9가 되겠죠.

 

이제 다 풀었습니다. 마지막으로 "같은 문자 또는 숫자가 연속해서 2번 나타나면 안된다" 라는 조건만 만족하면 되는데요. 이건 첫번째 문자를 꺼내온 이후부터 바로 직전 문자와 지금의 문자가 같은지를 비교하여 만약 같다면 해당 위치의 경우의 수를 1 줄여주면 됩니다.

 

아래 해답 코드를 보면 더 쉽게 이해할 수 있으실 겁니다.


코드(JAVA)

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int combination = 1;
        for (int i = 0; i < s.length(); i++) {
            // c = 알파벳, d = 숫자
            int cases = s.charAt(i) == 'c' ? 26 : 10;
            if (i > 0 && s.charAt(i) == s.charAt(i - 1)) {
                // 같은 알파벳 또는 숫자일 경우 하나의 경우의 수 제거
                cases--;
            }
            combination *= cases;
        }
        System.out.println(combination);
    }
}

 

 

16968번: 차량 번호판 1

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

www.acmicpc.net

 

반응형