백준 알고리즘(BOJ)
BOJ_16968_차량 번호판1
꼬꼬랑내
2021. 9. 7. 09:12
1
구분: brute-force
언어: java
전략:
- 코드를 짠다고 생각하지 말고, 수학 문제를 푼다고 생각해보자
- 숫자는 10가지, 문자는 26가지가 있다.
- **** - 각 자리에 들어갈 수 있는 문자나 숫자는 내 바로 앞것과 같지만 않으면 된다 --> 즉, 내 앞꺼랑만 다르면 된다
- 따라서 내 앞이 숫자면, 그 다음에는 그것만 아니면 되고(9가지), 문자이어도 동일하다(25)가지
- 내 앞의 것을 살피고, 단 한개와만 같지 않게 구한다.
2. 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
char[] carnum = new char[str.length()];
for(int i = 0; i<carnum.length; i++) {
carnum[i] = str.charAt(i);
}
//정답
int result = 1;
//맨 처음에 c라면
if(carnum[0]=='c')
result*= 26;
else //d라면
result*= 10;
for(int i = 1; i<carnum.length; i++) {
//이전것과 같다면 count를 1감소
if(carnum[i]==carnum[i-1]) {
if(carnum[i]=='c')
result*=25;
else
result*=9;
}
//같지 않아 -> count를 현재의 값으로 초기화
else {
//지금이 c라면
if(carnum[i]=='c')
result*=26;
else //d라면
result*=10;
}
}
System.out.println(result);
}
}
3
- brute-force라고 해서 그냥 순열 조합부터 만들어버렸다 --> 좀 더 살펴보자
- 실제 수학 문제를 푸는 것처럼 문제에 접근하였다.
- 연속되는 ddd나 ccc같은 경우 모두가 달라야 한다고 생각해서 계속 오답이었다.--> 정답을 앞에것만 달라도 된다.