728x90
반응형
2024.08.04기준 - 실버2
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 숫자의 길이가 주어지면 주어진 숫자 범위 안에서 0, 1, 2만 사용하여 3의 배수의 개수를 찾는 문제입니다.
1. 우선 만들 수 있는 최솟값과 최댓값을 구했습니다.
int min = (int)Math.pow(10, n - 1); // 만들 수 있는 수의 최솟값
int max = (int)Math.pow(10, n - 1) * 2 + (n > 1 ? maxVal() : 0); // 만들 수 있는 수의 최댓값
자리 수를 통해 최댓값을 구하기 위해 함수를 사용했습니다.
// max 값을 구하기 위한 함수.
private static int maxVal() {
StringBuilder num = new StringBuilder();
int len = n - 1;
while (len-- > 0) {
num.append(2);
}
return Integer.parseInt(num.toString());
}
2. 구해진 최솟값과 최댓값 범위 안에 수를 3의 배수이면서 0, 1, 2만 사용했는지 확인을 하여 출력합니다.
// 조건에 맞는지 체크
for (int i = min; i <= max; i++) {
if (i % 3 == 0) {
if (check(i)) { // 맞다면 count 업
count++;
}
}
}
// 0, 1, 2를 체크하는 함수.
private static boolean check(int num) {
char[] arr = String.valueOf(num).toCharArray();
for (int i = 0; i < n; i++) {
if (arr[i] == '3' || arr[i] == '4' || arr[i] == '5' || arr[i] == '6' || arr[i] == '7' || arr[i] == '8' || arr[i] == '9') {
return false;
}
}
return true;
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
static int n;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine());
int count = 0;
int min = (int)Math.pow(10, n - 1); // 만들 수 있는 수의 최솟값
int max = (int)Math.pow(10, n - 1) * 2 + (n > 1 ? maxVal() : 0); // 만들 수 있는 수의 최댓값
// 조건에 맞는지 체크
for (int i = min; i <= max; i++) {
if (i % 3 == 0) {
if (check(i)) { // 맞다면 count 업
count++;
}
}
}
bw.write(Integer.toString(count));
bw.flush();
bw.close();
br.close();
}
// max 값을 구하기 위한 함수.
private static int maxVal() {
StringBuilder num = new StringBuilder();
int len = n - 1;
while (len-- > 0) {
num.append(2);
}
return Integer.parseInt(num.toString());
}
// 0, 1, 2를 체크하는 함수.
private static boolean check(int num) {
char[] arr = String.valueOf(num).toCharArray();
for (int i = 0; i < n; i++) {
if (arr[i] == '3' || arr[i] == '4' || arr[i] == '5' || arr[i] == '6' || arr[i] == '7' || arr[i] == '8' || arr[i] == '9') {
return false;
}
}
return true;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 30022번 행사 준비 (0) | 2024.08.05 |
---|---|
BEAKJOON / 백준 - JAVA 25186번 INFP 두람 (0) | 2024.08.05 |
BEAKJOON / 백준 - JAVA 13268번 셔틀런 (0) | 2024.08.03 |
BEAKJOON / 백준 - JAVA 11916번 볼질 (0) | 2024.08.02 |
BEAKJOON / 백준 - JAVA 10829번 이진수 변환 (0) | 2024.08.01 |