프로그래머스 k의 개수

KIMYEONGJUN·2026년 9월 15일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글