문제 링크
주의사항
- 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);
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:1,입출력과 사칙연산,JAVA) 3003번, 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2022.08.16 |
---|---|
[백준] code.plus(시뮬레이션과 구현,JAVA)19236번, 청소년 상어 (0) | 2022.08.15 |
[백준] code.plus(시뮬레이션과 구현,JAVA)20061번, 도노미노도미노 2 (0) | 2022.08.13 |
[백준] code.plus(시뮬레이션과 구현,JAVA)16939번, 2×2×2 큐브 (0) | 2022.08.13 |
[백준] code.plus(시뮬레이션과 구현,JAVA)16974번, 레벨 햄버거 (0) | 2022.08.11 |
댓글