문제 설명
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
나의 코드
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
for(int a=i; a<=j; a++) {
String numStr = String.valueOf(a);
for(int b=0; b<numStr.length(); b++) {
if(numStr.charAt(b)==k+'0') answer++;
}
}
return answer;
}
}
다른 사람 코드
class Solution {
public int solution(int i, int j, int k) {
String str = "";
for(int a = i; a <= j; a++) {
str += a+"";
}
return str.length() - str.replace(k+"", "").length();
}
}
length()
와 replace()
함수를 사용한 방법
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
for (int num = i; num <= j; num++){
int tmp = num;
while (tmp != 0){
if (tmp % 10 == k)
answer++;
tmp /= 10;
}
}
return answer;
}
}
문자열로 변경하지 않고, 정수로 풀이하는 방법
느낀 점
주어진 정수타입을 문자열로 변경하여 문자열 각각의 char값을 비교해주며 해결
다른 사람 코드처럼 정수인 채로 10으로 계속 나누어가며 나머지값을 통해 구해주는 방법도 있고, 다양한 함수들을 활용하여 해결하는 참신한 방법도 존재했다 😮