Post

🧩 Baekjoon 5671 - ν˜Έν…” λ°© 번호

🧩 Baekjoon 5671 - ν˜Έν…” λ°© 번호

문제

μ„ μ˜μ΄λŠ” μ§‘ ν˜Έμˆ˜μ— λ°˜λ³΅λ˜λŠ” μˆ«μžκ°€ μžˆλŠ” κ²½μš°μ—λŠ” κ·Έ 집에 μ‚¬λŠ” μ‚¬λžŒμ—κ²Œ 뢈운이 μ°Ύμ•„μ˜¨λ‹€κ³  λ―ΏλŠ”λ‹€. λ”°λΌμ„œ, μ„ μ˜μ΄λŠ” 838ν˜Έλ‚˜ 1004ν˜Έμ™€ 같이 ν•œ μˆ«μžκ°€ 두 번 이상 λ“€μ–΄μžˆλŠ” μ§‘μ—λŠ” μ ˆλŒ€ μ‚΄μ§€ μ•Šμ„ 것이닀.

2050λ…„, μ„ μ˜μ΄λŠ” ν•œκ΅­μ—μ„œ κ°€μž₯ 돈이 λ§Žμ€ μ‚¬λžŒμ΄ λ˜μ—ˆλ‹€. κ·Έλ…€λŠ” 해변가에 μƒˆλ‘œμš΄ ν˜Έν…”μ„ ν•˜λ‚˜ μ§€μœΌλ €κ³  ν•œλ‹€. ν•˜μ§€λ§Œ, νˆ¬μˆ™κ°μ—κ²Œ 뢈운이 μ°Ύμ•„μ˜€λŠ” 것을 ν”Όν•˜κΈ° μœ„ν•΄μ„œ λ°˜λ³΅λ˜λŠ” μˆ«μžκ°€ μ—†κ²Œ λ°© 번호λ₯Ό λ§Œλ“€λ €κ³  ν•œλ‹€.

μ •λΆ€λŠ” μ„ μ˜μ΄μ˜ ν˜Έν…” λ°© λ²ˆν˜ΈλŠ” N보닀 ν¬κ±°λ‚˜ κ°™κ³ , M보닀 μž‘κ±°λ‚˜ κ°™μ•„μ•Ό ν•œλ‹€λŠ” 쑰건을 κ±Έκ³  μ‹ μΆ• ν—ˆκ°€λ₯Ό λ‚΄μ£Όμ—ˆλ‹€. μ„ μ˜μ΄μ˜ μƒˆ ν˜Έν…”μ—λŠ” 방이 μ΅œλŒ€ λͺ‡ 개 μžˆμ„ 수 μžˆμ„κΉŒ? (두 방이 같은 λ°© 번호λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€)

μž…λ ₯

μž…λ ₯은 μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ‘œ 이루어져 있고, ν•œ 쀄이닀. 각 μ€„μ—λŠ” 문제의 μ„€λͺ…에 λ‚˜μ™€μžˆλŠ” Nκ³Ό M이 μ£Όμ–΄μ§„λ‹€. (1 ≀ N ≀ M ≀ 5000)

좜λ ₯

각각의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ N보닀 ν¬κ±°λ‚˜ κ°™κ³ , M보닀 μž‘κ±°λ‚˜ 같은 수 μ€‘μ—μ„œ λ°˜λ³΅λ˜λŠ” μˆ«μžκ°€ μ—†λŠ” κ²ƒμ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

예제

βœ… μž…λ ₯ 1

1
2
3
4
87 104
989 1022
22 25
1234 1234

βœ… 좜λ ₯ 1

1
2
3
4
14
0
3
1

μž‘μ„± μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        // 1. λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        int n, m;
        
        // 2. μž…λ ₯이 μ‘΄μž¬ν•  경우
        while ((line = br.readLine()) != null && !line.isEmpty()) {
            // λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”
            StringTokenizer st = new StringTokenizer(line);
            n = Integer.parseInt(st.nextToken());
            m = Integer.parseInt(st.nextToken());
            int cnt = 0;
            
            // λ²”μœ„λ§ŒνΌ 반볡
            for (int i = n; i <= m; i++) {
                int[] cntArr = new int[10];
                if (cntNum(i, cntArr)) cnt++;
            }
            
            // 좜λ ₯
            System.out.println(cnt);
        }
    }
    
    /**
     * cntNum: 쀑볡 번호 카운트
     * @param num
     * @param cntArr
     * @return
     */
    private static boolean cntNum(int num, int[] cntArr) {
        while (num > 0) {
            // λ‚˜λ¨Έμ§€ 계산
            int digit = num % 10;
            
            // ν•΄λ‹Ή μˆ«μžκ°€ ν•œ 개 초과일 경우 κ±°μ§“
            if (cntArr[digit] > 0) return false;
            cntArr[digit]++;
            
            // λ‚˜λˆ„κΈ°
            num /= 10;
        }
        
        // ν•œ 개 초과인 μˆ«μžκ°€ 없을 경우 μ°Έ
        return true;
    }
}
This post is licensed under CC BY 4.0 by the author.