
내가 생각했을때 문제에서 원하는부분
1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다.
정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.
내가 이 문제를 보고 생각해본 부분
Main144 main = new Main144();
solution 메서드를 실행하기 위해 현재 클래스의 객체를 생성한다.
int result1 = main.solution(1, 13, 1);
프로그래머스 입출력 예시들의 값을 solution 메서드에 전달하고 그 결과를 변수에 저장한다.
String target = String.valueOf(k);
찾으려는 숫자 k를 문자열(String) 형태로 변환하여 target 변수에 담아둔다.
for (int num = i; num <= j; num++)
시작 값 i부터 끝 값 j까지 범위 안의 모든 숫자를 순회하기 위해 반복문을 실행한다.
String strNum = String.valueOf(num);
자릿수 단위로 비교하기 위해 현재 숫자(num)를 문자열로 변환한다.
answer += strNum.length() - strNum.replace(target, "").length();
현재 문자열의 전체 길이에서 찾으려는 숫자(target)를 빈 문자열로 모두 치환한 길이를 뺀다.
이 차이 값을 통해 해당 숫자 안에 k가 몇 번 포함되어 있는지 정확히 구하고, 그 횟수를 answer에 계속해서 더해준다.
return answer;
반복문이 모두 끝난 후 i부터 j까지 k가 등장한 총 횟수가 담긴 answer를 최종 반환한다.
코드로 구현
class Solution {
public int solution(int i, int j, int k) {
int answer = 0;
String target = String.valueOf(k);
for (int num = i; num <= j; num++) {
String strNum = String.valueOf(num);
answer += strNum.length() - strNum.replace(target, "").length();
}
return answer;
}
}
프로그래머스 코드
package programmers.programmers2;
// 프로그래머스 k의 개수
public class Main144 {
public static void main(String[] args) {
Main144 main = new Main144();
// 입출력 예시 1
int result1 = main.solution(1, 13, 1);
System.out.println(result1);
// 입출력 예시 2
int result2 = main.solution(10, 50, 5);
System.out.println(result2);
// 입출력 예시 3
int result3 = main.solution(3, 10, 2);
System.out.println(result3);
}
public int solution(int i, int j, int k) {
int answer = 0;
String target = String.valueOf(k);
for (int num = i; num <= j; num++) {
String strNum = String.valueOf(num);
answer += strNum.length() - strNum.replace(target, "").length();
}
return answer;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.