보기에는 쉬워 보인다. 하지만 엄청 애먹었던 문제이다. 일단 내가 짜고 정답으로 맞춘 코드는 다음과 같다:
import sys
A = int(sys.stdin.readline())
B = int(sys.stdin.readline())
listB = [int(i) for i in str(B)]
nth_num = 2
nth_digit = 1
sumlist = []
for i in listB:
sum_num = A*int(listB[nth_num])*nth_digit
print(int(sum_num/nth_digit))
nth_num -= 1
nth_digit *= 10
sumlist.append(sum_num)
print(sum(sumlist))
굉장히 난잡하다. 일단 설명하자면 다음과 같다
- Line1~5번은 스킵한다. 기본적인 것이기 때문이다
- 6 - Line 6는 B 숫자를 list로 쪼개서 만들어준다.
- 8 - nth_num은 list의 n번째 숫자를 의미한다. (lisB = [1, 2, 3]이면 nth_num = 2인 것은 3이다.)
- 9 - nth_digit은 1의 자리수, 10의 자리수, 100의 자리수를 의미한다
- 10 - sumlist도 결국엔 최종적인 곱셈의 값을 더해주기 위해 필요한 리스트를 만들어놓은 것이다
- 11 - for i in listB → 즉, listB에 있는 i의 개수만큼(3개):
- 12 - 일단 sum_num, 즉 사진의 (3), (4), (5)의 자릿수 값, 단순히 3776이 아닌 37760, 1416이 아닌 141600, 을 구하기 위한 식이다.
- 13 - 그리고 이 sum_num을 nth_digit으로 나눈 값을 출력한다. 결국 자릿수 값이 아닌 단순한 3776, 1416 같은 값만 출력해야되기 때문이다.
- 14 - 이제는 list의 2번째 숫자가 아닌 1번째 숫자로 실행해야 하므로, nth_num에서 1을 빼준다
- 15 - 그리고 자릿수가 늘어나므로, nth_digit을 10을 곱해준다
- 16 - 그리고 마지막으로 sumlist에 sum_num의 값을 이어준다.
- 코드의 for은 listB의 index의 개수만큼 (3개) 실행시킨다.
- 17 - for문이 끝나고 나면, 지금까지 완성된 sumlist의 합을 구해서 출력한다.
코드랑 설명을 보면 굉장히 난잡하지 않은가? 더 좋은 방법이 있을거라고 생각하긴 했으나 어떻게 해야될지 모르겠어서 다른 개발자들의 블로그를 참고해봤다. 다음은 하나의 예시이다:
inp1 = int(input())
inp2 = int(input())
out1 = inp1*((inp2%100)%10)
out2 = inp1*((inp2%100)//10)
out3 = inp1*(inp2//100)
res = inp1*inp2
print(out1, out2, out3, res, sep='\n')
출처: <gabii.tistory.com/entry/BaekJoonPython3-%EB%B0%B1%EC%A4%80-2588%EB%B2%88-%EA%B3%B1%EC%85%88>
out1, out2, ou3, res로 정의를 한다.
out1에 나타난 ((inp2%100)%10) 은 inp2를 100으로 나누고 남은 숫자 나누기 10으로 나누고 남은 1의 자리이다
out2에 나타난 ((inp2%100)//10) 은 inp2를 100으로 나누고 남은 숫자 나누기 10으로 나눈 몫 (10의 자리수)
out3에 나타난 (inp2//100) 은 inp2를 100으로 나눈 몫이다 (100의 자리수)
res는 단순히 inp1과 inp2를 곱한 값이다.
너무나도 간단하게 푸신다;; 아무래도 문제를 푸는것도 중요하지만, 어떻게 더 효율적으로, 데이터를 덜 사용하면서 풀것인가를 고민하면서 푸는 것도 매우 중요한듯 하다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이 - 2739번> 파이썬 - 구구단 (0) | 2020.10.16 |
---|---|
<백준 문제풀이 - 14681번> 파이썬 - 사분면 고르기 (0) | 2020.10.16 |
<백준 문제풀이 - 10430번> 파이썬 - 나머지 (0) | 2020.10.15 |
<백준 문제풀이 - 10869번> 파이썬 - 사칙연산 (0) | 2020.10.15 |
<백준 문제풀이 - 10998번> 파이썬 - A x B (0) | 2020.10.15 |