본문 바로가기
백준

[백준] code.plus(브루트 포스 Part 1,JAVA)16968번, 차량 번호판 1

by 열정적인 이찬형 2022. 8. 14.

문제 링크

 

16968번: 차량 번호판 1

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

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

 

이 문제에 핵심은

 

1. 숫자는 0~9까지 문자는 a~z까지 사용이 가능하다.

2. 연속된 문자나 숫자는 사용할 수 없습니다.

3. 번호판 형식의 d는 숫자, c는 문자를 뜻합니다.

4. 번호판 형식이 주어졌을 때 만들 수 있는 번호판의 개수를 결과로 출력합니다.

 

알고리즘 진행 순서.

 

1. 입력되는 정보들을 저장합니다.

 

2. 번호판이 나올 수 있는 패턴의 개수를 구합니다.

 

3. 번호판 형식이 주어졌을 때 패턴을 조합하여 개수를 결과로 출력합니다.

 

패턴(8가지)

※아래 패턴을 이용하면 모든 번호판 형식을 만들 수 있습니다.

 

숫자

 

d = 10

dd = d × d - d = 90

ddd = dd × d - dd = 810

dddd = ddd × d - ddd = 7290

문자

 

c = 26

cc = c × c - c = 650

ccc = cc × c - cc = 16250

cccc = ccc × c - ccc = 406250

 

※ 빼기(-)을 해주는이유는 연속된 문자나 숫자는 사용할 수 없기 때문입니다.

 

이제 조합을 예를 들어 만들어보면

cdd

c = 26

dd = 90

c × dd = 26 × 90 = 2340개를 만들 수 있습니다.

 

 

 

 

예제입력 3

 

1. 입력되는 정보들을 저장합니다.

형식 : dcdd

 

2. 번호판이 나올 수 있는 패턴의 개수를 구합니다.

 

설명한 패턴들을 정의합니다.

 

3. 번호판 형식이 주어졌을 때 패턴을 조합하여 개수를 결과로 출력합니다.

dcdd

d = 10

c = 26

dd = 90

d × c × dd = 10 × 26 × 90 = 23400

 

결과로 23400을 출력합니다.

 

 

  • BufferedReader를 사용하여 입력 값을 받았습니다.
  • init 실행하여 패턴들의 값들을 정의합니다.
  • 형식을 패턴들로 나눈 뒤 패턴들의 값들을 이용해 번호판의 개수를 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.
  • init함수는 번호판의 나올 수 있는 패턴들을 정의합니다.

 

import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    static HashMap<String, Integer> map = new HashMap<>();	//패턴 저장하는 HashMap
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        init();		//2. 번호판이 나올 수 있는 패턴의 개수를 구합니다.
        String str = br.readLine();		//1. 입력되는 정보들을 저장합니다.
        String temp = str.charAt(0) + "";
        int answer = 1;
        //3. 번호판 형식이 주어졌을 때 패턴을 조합하여 개수를 결과로 출력합니다.
        for(int i=1;i<str.length();i++){
            if(str.charAt(i) == str.charAt(i-1))
                temp += str.charAt(i);
            else{
                answer *= map.get(temp);
                temp = str.charAt(i) + "";
            }
        }
        answer *= map.get(temp);
        bw.write(answer + "");	//번호판의 개수 BufferedWriter 저장
        bw.flush();		//결과 출력
        bw.close();
        br.close();
    }
    //패턴 정의하는 함수
    static void init(){
        map.put("d" , 10);
        map.put("dd", 90);
        map.put("ddd", 810);
        map.put("dddd", 7290);
        map.put("c", 26);
        map.put("cc", 650);
        map.put("ccc", 16250);
        map.put("cccc",406250);

    }
}

댓글