k의 개수 구하기
Algorithm 관련 포스팅
- 최빈값 구하기
- k의 개수 구하기
- String
- 문자열 정렬하기
- 인덱스 바꾸기
- 제곱수 판별하기
- Math
- 배열 회전시키기
- A로 B 만들기
- 잘라서 배열로 저장하기
- Array와 ArrayList
- 저주의 숫자 3
이 글은 프로그래머스의 k의 개수 문제의 풀이를 정리한 것입니다.
문제 설명
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i
, j
, k
가 매개변수로 주어질 때, i
부터 j
까지 k
가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
i
<j
≤ 100,000 - 0 ≤
k
≤ 9
입출력 예
i | j | k | result |
---|---|---|---|
1 | 13 | 1 | 6 |
10 | 50 | 5 | 5 |
3 | 10 | 2 | 0 |
입출력 예 설명
입출력 예 #1
- 본문과 동일합니다.
입출력 예 #2
- 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.
입출력 예 #3
- 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.
나의 풀이(1)
- 주어진 숫자를 하나씩 돌면서 비교
- 주어진 숫자를
tmp
변수에 넣고 -
tmp
를 10으로 나눈 나머지가 k이면answer
를 1증가시킴→ 이는
tmp
의 일의 자리 숫자에 있는 k를 가리킴 -
tmp
의 일의 자리 숫자 비교가 끝났으니 다음 자리(십의 자리) 숫자를 비교함→ 다음 자리 숫자가 없으면 10으로 나눈 몫은 0이 됨
-
다음 자리 숫자가 있을 때까지 비교
→ 다음 자리 숫자가 있으면 10으로 나눈 몫이 0이 아님
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
// 1.
for (int num = i; num <= j ; num++) {
// 2.
int tmp = num;
// 5.
while(tmp != 0) {
// 3.
if (tmp % 10 == k) answer++;
// 4.
tmp /= 10;
}
}
return answer;
}
}
나의 풀이(2)
- 주어진 숫자를 하나씩 돌면서 비교
- 해당 숫자(
int
)를String
으로 변환 -
변환한 문자열을 한 글자씩 돌면서 비교
3-1.
int
인k
를char
(k_char
)로 형변환3-2. 해당 문자열에
k_char
가 존재하는 수만큼answer
증가
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
// 1.
for (int a = i; a <= j; a++) {
// 2.
String num = String.valueOf(a);
// 3.
for (int b = 0; b < num.length(); b++) {
// 3-1.
char k_char = (char)(k + '0');
// 3-2.
if (num.charAt(b) == k_char) answer++;
}
}
}