문제
세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에
0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427이라면
A × B × C = 150 × 266 × 427 = 17037300 이 되고,
계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
입력
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다.
A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.
#백준 2577
abc = [] #입력 된 수 저장
count = [0]*10 #리스트 10개의 공간 0 초기화
for i in range(3):
abc.append(int(input()))
Value = abc[0] * abc[1] * abc[2]
nextvalue = Value
while True:
fvalue = nextvalue % 10
count[fvalue] += 1
nextvalue //= 10
if nextvalue < 100:
count[nextvalue//10] += 1
count[nextvalue%10] += 1
break
for i in range(10):
print(count[i])
150 * 266 * 427의 결과는 Value에 저장됩니다. (Value = 17037300)
변수 nextvalue는 Value의 값을 가지며 while 반복문에 사용됩니다.
while 내부
1. fvalue는 일의 자리 값을 얻습니다. (17037300 % 10 = 0)
2. 일의 자리는 수를 구성하는 하나의 요소와 같습니다.
count는 요소(수)의 개수가 몇 개 있는지 저장하는 리스트입니다.
count 리스트에서 인덱스 0은 0이 몇 개 있는지, 인덱스 1은 1이 몇 개 있는지 알 수 있습니다.
3. nextvalue에 10을 나눈 몫을 다음 nextvalue로 합니다.
이미 계산한 일의 자리 요소 0을 없애기 위함입니다.
4. 작업을 반복하게 되면 nextvalue 값이 십의 자리까지만 있게 되는 경우가 발생합니다.
그때는 마무리 작업으로 일의 자리 요소와 십의 자리 요소를 분리하여 개수를 셀 수 있도록 합니다.
5. 요소들의 개수를 모두 세었기 때문에 break로 while 반복을 탈출합니다.
-끝-
'작업 > Problem Solving' 카테고리의 다른 글
백준 4673(셀프 넘버) 파이썬(python) 해결 (2) | 2020.07.26 |
---|---|
백준 4344(평균은 넘겠지) 파이썬(python) 해결 (0) | 2020.07.24 |
백준 2523, 2446, 10996(별 찍기 13, 9, 21) 파이썬(python) 해결 (0) | 2020.07.22 |
백준 10817(세 수) 파이썬(python) 해결 (0) | 2020.07.22 |
백준 5543(상근날드) 파이썬(python) 해결 (0) | 2020.07.22 |