반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [백준 알고리즘] 백준 16968번 차량 번호판 1 자바(Java)

1) 문제번호 : 16968번

 

2) 문제 출처

www.acmicpc.net/problem/16968

 

16968번: 차량 번호판 1

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

www.acmicpc.net

 

2. 문제

상도시의 차량 번호판 형식이 주어졌을 때, 가능한 차량 번호판의 개수를 구해보자.

  • 번호판에 사용할 수 있는 숫자는 0, 1, 2, ..., 8, 9이다.
  • 사용할 수 있는 문자는 a, b, c, d, ..., y, z이다.
  • 차량 번호판의 형식은 최대 4글자이고, c와 d로 이루어진 문자열로 나타낼 수 있다.
  • c는 문자가 위치하는 자리, d는 숫자가 위치하는 자리이다.
  • 같은 문자 또는 숫자가 연속해서 2번 나타나면 안 된다.

예를 들어, 형식이 "cd"이면, a1, d4, h5, k4 등이 가능하다. 형식이 "dd"인 경우에 01, 10, 34, 69는 가능하지만, 00, 11, 55, 66은 같은 숫자가 2번 연속해서 불가능하다.

 

3. 제약사항

4. 입력

첫째 줄에 차량 번호판의 형식이 주어진다. 형식은 길이가 4보다 작거나 같으며, c와 d로만 이루어져 있다.

 

5. 출력

첫째 줄에 가능한 차량 번호판의 개수를 출력한다.

 

6. 풀이

- 영문자는 A부터 Z까지 총 26개이다. 

- 숫자는 0부터 9까지 총 10개이다.

- 그래서, 문자가 c라면 26C1을 곱해주고, d라면 10C1을 곱해주면 된다.

- 여기서 주의해야 할 점은 cc나 dd가 나올 경우에는 중복되는 수를 줄여서 곱해주면 된다.

- 즉, cc가 나올 경우에는 26C1 X 25C1, dd가 나올 경우에는 10C1 X 9C1을 곱해주면 된다.

 

7. 소스 코드

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		int num = 1;

		// 맨처음 처리
		String start = s.substring(0, 1);
		
		//c일 경우 26을 곱하고, d이면 10 곱한다.
		if (start.equals("c")) num *= 26;
		else num *= 10;

		for (int i = 0; i < s.length() - 1; i++) {
			String a = s.substring(i, i + 1);
			String b = s.substring(i + 1, i + 2);

			// 앞 문자와 뒷 문자가 c로 같다면 25를 곱하고 아니면 10을 곱한다.
			if (a.equals("c")) {
				if (a.equals(b)) num *= 25;
				else num *= 10;
			}
            
            // 앞 문자와 뒷 문자가 d로 같다면 9를 곱하고 아니면 26을 곱한다.
			else if (a.equals("d")) {
				if (a.equals(b)) num *= 9;
				else num *= 26;
			}
		}
		
		//출력
		System.out.println(num);
	}
}

 


 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기