Joonas' Note

Joonas' Note

[코딩으로 풀어보기] 자동차 번호판의 숫자가 겹칠 확률 본문

알고리즘

[코딩으로 풀어보기] 자동차 번호판의 숫자가 겹칠 확률

2021. 11. 12. 19:07 joonas

    대한민국 자동차 번호판

    문득 그런 생각이 들었다.

    사람들이 자신의 자동차 번호판을 고를 때, 외우기 쉬운 배열을 많이 고르지 않을까?
    그럼, 숫자가 겹치면 외우기 쉬우니까 그런 차량이 많이 있으려나?

    위는 근거 없는 추측일뿐이지만, 실제로 도로 위에서 숫자가 겹치는 번호판은 정말 많다.

    그럼 정말로 도로 위의 차량 중에서 숫자가 겹치는 번호판을 만날 확률은 얼마나 될까?

     

    먼저 번호판은 0 으로 시작하지 않으므로, 1000 부터 9999 까지 등장할 수 있다.

    그럼 뒤 4자리(XX가 YYYY 중에서 YYYY)가 겹칠 확률만 계산해보자.

    def collide(n):
        a = {}
        for i in n:
            if i in a: return 1
            a[i] = 1
        return 0
    
    cnt = 0
    s = 0
    for i in range(1000, 10000):
        cnt += collide(str(i))
        s += 1
    
    print('{}/{} ({:.3f}%)'.format(cnt, s, cnt / s * 100))
    
    # output
    # 4464/9000 (49.600%)

    결과는 49.6% 이다. 즉, 도로 위에서 만나는 차량의 2대 중 1대는 번호에 겹치는 숫자가 있다는 뜻이다.

    경우의 수로 계산해보면, \(1 - (9 \cdot 9 \cdot 8 \cdot 7) / 9000 = 49.6\%\) 이므로 맞다.

     

    그럼, 앞 2자리를 포함하여 6자리 중에 겹칠 확률을 구해보자.

    cnt = 0
    s = 0
    for i in range(1000, 10000):
        for j in range(1, 1000):
            cnt += collide('{:02d}'.format(j) + str(i))
            s += 1
    
    print('{}/{} ({:.3f}%)'.format(cnt, s, cnt / s * 100))
    
    # output
    # 8371080/8991000 (93.105%)

    앞 자리는 0으로 시작할 수 있고, 3자리인 경우까지 고려해야한다.

    번호판의 모든 숫자 6개 중에 숫자가 겹칠 확률은 93.105% 이다.

    Comments