문제 설명
0 ~ N까지 수를 나열했을 때 숫자 K가 몇 번이나 자릿수로 등장하는지 확인하는 프로그램을 구현하세요.
K의 등장 횟수이기 때문에 K가 1인 경우 111에서는 1이 3번 등장했다고 보고, 결과에 3을 추가해야 합니다.
입력 형식
· N : 확인하고자 하는 마지막 숫자
· K : 몇 번 등장하는지 확인할 숫자
출력 형식
· K가 자릿수로 등장한 횟수를 정수로 반환
제약 사항
· 1 <= N <= 100000
· 0 <= K <= 9
입출력 예시
· 입력
· N = 25
· K = 2
· 출력 : 9
· 설명 : 2가 등장하는 숫자는 2, 12, 20, 21, 22, 23, 24, 25로, 총 9번이 된다. (22에는 2번 등장하는 점에 유의)
작성 코드
class Solution241 {
public int solution(int N, int K) {
int count = 0;
for (int i = 0; i <= N; i++) {
String str = Integer.toString(i); // 숫자를 문자열로 변환
for (int j = 0; j < str.length(); j++) {
// K와 같은 숫자가 등장하면 count 증가
if (str.charAt(j) == Character.forDigit(K, 10)) {
count++;
}
}
}
return count;
}
public static void main(String[] args) {
Solution241 st = new Solution241();
int N = 25;
int K = 2;
System.out.println(st.solution(N, K));
int N2 = 111;
int K2 = 1;
System.out.println(st.solution(N2, K2));
}
}
정답 코드
class Solution {
public int solution(int N, int K) {
int count = 0;
int nLen = String.valueOf(N).length();
for (int i = 0; i < nLen; i++) {
count += countDigit(N, i, K);
}
return count;
}
int countDigit(int number, int d, int K) {
int power = 1;
for (int i = 0; i < d; i++) {
power *= 10;
}
int nextPower = power * 10;
int right = number % power;
int down = number - number % nextPower;
int up = down + nextPower;
int digit = (number / power) % 10;
if (digit < K) {
return down / 10;
} else if (digit == K) {
return down / 10 + right + 1;
} else {
return up / 10;
}
}
public static void main(String[] args) {
Solution st = new Solution();
int N = 25;
int K = 2;
System.out.println(st.solution(N, K));
int N2 = 111;
int K2 = 1;
System.out.println(st.solution(N2, K2));
}
}
'연습 코딩테스트' 카테고리의 다른 글
연습문제 2-4(3) 문자열 회전에 의한 결과 판단 (0) | 2023.04.08 |
---|---|
연습문제 2-4(2) 만들 수 있는 숫자 중 K번째로 큰 숫자 (0) | 2023.04.08 |
연습문제 2-3(5) 마지막에 남는 사람의 번호 구하기 (0) | 2023.04.06 |
연습문제 2-3(4) 뒤집어야 하는 비트의 개수 (0) | 2023.04.06 |
연습문제 2-3(3) 문자열 사칙연산 계산 프로그램 (0) | 2023.04.06 |