Contents

k의 개수 (with.Java)

   May 25, 2024     2 min read

β€œk의 개수 (with.Java)” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

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

μž…μΆœλ ₯ μ˜ˆμ‹œ

ijkresult
11316
105055
31020

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

class Solution {
    public int solution(int i, int j, int k) {
        int answer = 0;
        String str = "0";
        char ch = '0';
        for(int a = i; a <= j; a++){
            str = Integer.toString(a);
            for(int b = 0; b < str.length(); b++){
                ch = str.charAt(b);
                if(ch == Integer.toString(k).charAt(0)){
                    answer++;
                }
            }
        }
        return answer;
    }
}

풀이 리뷰

answer λ³€μˆ˜λ₯Ό μ΄ˆκΈ°κ°’ 0으둜 μ„€μ •ν•©λ‹ˆλ‹€.

이 λ³€μˆ˜λŠ” κ²°κ³Όλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

str λ³€μˆ˜λ₯Ό β€œ0β€μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. 이 λ³€μˆ˜λŠ” 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

ch λ³€μˆ˜λ₯Ό β€˜0β€™μœΌλ‘œ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. 이 λ³€μˆ˜λŠ” λ¬Έμžμ—΄μ—μ„œ ν•œ λ¬Έμžμ”© ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

a λ³€μˆ˜λ₯Ό iλΆ€ν„° jκΉŒμ§€ μ¦κ°€μ‹œν‚€λ©΄μ„œ λ°˜λ³΅λ¬Έμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

a 값을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ str λ³€μˆ˜μ— μ €μž₯ν•©λ‹ˆλ‹€.

b λ³€μˆ˜λ₯Ό 0λΆ€ν„° str의 길이-1κΉŒμ§€ μ¦κ°€μ‹œν‚€λ©΄μ„œ λ°˜λ³΅λ¬Έμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

str의 b번째 문자(ch)λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

chκ°€ k와 κ°™λ‹€λ©΄, answer λ³€μˆ˜λ₯Ό 1 μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€.

반볡문이 μ’…λ£Œλ˜λ©΄ answer λ³€μˆ˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

ν•΄λ‹Ή μ½”λ“œλŠ” μž…λ ₯받은 λ²”μœ„ λ‚΄μ—μ„œ 각 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜κ³ , λ¬Έμžμ—΄μ˜ 각 문자λ₯Ό ν•˜λ‚˜μ”© ν™•μΈν•˜μ—¬ k와 λΉ„κ΅ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.