프로그래밍 파이썬 문제 도와주세요

2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376 로 구성된 문자열을 받아 숫자의 빈도수와 각 숫자의 비율을 큰 순으로 배열하는 것이 문제입니다. 그래서 아래와 같이 코딩해 보았는데 계속 오류가 떠 도움을 요청하게 되었습니다. 올바른 결과값이 나오려면 어떻게 수정해야하는지 도와주세요ㅠㅠ 감사합니다.

결과값은 [('3', 17, 18.7%), ('6', 16, 17.6%), ('4', 10, 11.0%), ('8', 9, 9.9%), ('0', 8, 8.8%), ('9', 8, 8.8&), ('7', 7, 7.7%), ('1', 6, 6.6%), ('5', 6, 6.6%), ('2', 4, 4.4%)]

2개의 답변이 있어요!

  • 안녕하세요

    샘플 소스입니다.

    ds = '2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376' def digit_frequencies(ds): digits_count = [0 for _ in range(10)] for d in ds: digits_count[int(d)] += 1 paired = [] i = 0 for dc in digits_count: paired.append([str(i), dc]) i += 1 return paired # paired = digit_frequencies(ds) # print(paired) def digit_frequencies_sort(ds): paired = digit_frequencies(ds) paired.sort(key = lambda x : x[1], reverse = True) return paired def digit_ranking_board(ds): paired = digit_frequencies_sort(ds) length = len(ds) i = 0 for p in paired: p.append(str(round(p[1] / length * 100, 1)) + '%') paired[i] = tuple(p) i += 1 return paired print(digit_ranking_board(ds))

  • 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376 로 구성된 문자열을 받아 숫자의 빈도수와 각 숫자의 비율을 큰 순으로 배열하는 것이 문제입니다. 그래서 아래와 같이 코딩해 보았는데 계속 오류가 떠 도움을 요청하게 되었습니다. 올바른 결과값이 나오려면 어떻게 수정해야하는지 도와주세요ㅠㅠ 감사합니다.

    결과값은 [('3', 17, 18.7%), ('6', 16, 17.6%), ('4', 10, 11.0%), ('8', 9, 9.9%), ('0', 8, 8.8%), ('9', 8, 8.8&), ('7', 7, 7.7%), ('1', 6, 6.6%), ('5', 6, 6.6%), ('2', 4, 4.4%)]

    ===> 소스를 보니 너무 어렵게 푸시는것 같습니다

    for 문으로 ds 의 글자갯수만큼 반복을 시키면서 1차원 배열에 카운터를 누적시키는것입니다

    그래서 for 문이 완료되면? 개별 숫자가 몇번 나와있는지 확인이 되겠죠

    그래도 잘 모르시겠다면?

    1. 1차원 배열을 초기화 해준다. cc[0] = 0 , cc[1] = 0 .....

    2. for 문을 ds 글자크기만큼 반복을 하게 정의해준다

    2-1. for n1 문 안에서 1글자씩 숫자를 가져와서 지정한 배열에 1 증가시킨다

    (예) cc[n1] = cc[n1] + 1

    3. for 루프가 끝나면 , 이젠 for n2 루프를 사용하는데 0-9 로 루프되게 정의한다

    3-1. 출력시 100분률 구하는 공식에 따라서 ds 총글자수를 활용하여 100분율 구한다

    위 알고리즘으로 푸시면 쉽게 풀릴겁니다