프로그래머스 : k의 개수

Digeut·2023년 2월 25일
0

프로그래머스

목록 보기
6/164

❔문제설명

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

🤔아이디어

k를 문자열로 바꾼 다음, 반복문을 통해서 (여기서 평소쓰던 int i 값 아닌, int l값으로) 문자열로 바꾼 l값이 k값을 포함하고 있다면 answer에 더해주자!

❌틀린 코드

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;
        String kStr = String.valueOf(k); //k를 string로 변환
        
        for(int l = i ; l <= j ; l++){
            String lStr = String.valueOf(l); //l을 string으로 변환
            if(lStr.contains(kStr)){
                answer++ ;
            }
        }
        return answer;
    }
}

🙄오류


다른 테스트에서는 성공했는데, 1의 테스트에서 1,10,11,12,13이 1을 포함하는데
여기서 11에서 1이 2번 들어간걸 포함하지 못했다!
-> 배열로 쪼개서 1이 두번 반환되게 해야한다...

💡코드 풀이

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;
        String kStr = String.valueOf(k); //k를 string로 변환
        
        for(int l = i ; l <= j ; l++){
            String lStr = String.valueOf(l); //l을 string으로 변환
            if(lStr.contains(kStr)){
                String[] Array = lStr.split(""); //k를 포함하는 l값을 배열로 만들기
                for(String strArray : Array){ //배열을 문자열로 변환
                    if (strArray.equals(kStr)) answer++;
                }
            }
        }
        return answer;
    }
}

똑같은 k가 두번 들어간 수까지 카운트해야하는거 관건이었다.
String strArray : Array 통해서 배열을 for문 안에서 문자열로 바꾼다음
contain말고 equals를 사용하는게 주된 포인트..!

profile
개발자가 될 거야!

0개의 댓글