본문 바로가기
알고리즘 풀이

[algorithm] 백준: 2588 곱셈

by 째깍단 2023. 4. 3.

2588 답:

 

더보기
a = int(input())
b = int(input())

b_list = []

def seperate(number):
    # 1의자리 ~ 높은 자리수 리스트 만들기
    while (number != 0):
        b_list.append(number % 10)
        number = number//10
    return b_list

seperate(b)

print(b_list[0] * a, b_list[1] * a, b_list[2] * a, a * b, sep='\n')

 

 

 

 

문제 분석 및 해석

 

"""

세자리 자연수 2개를 각각 a b라고 부를때,

(1)  a, b를 각각 1, 2 줄에 입력값을 받는다

 

(2) b를 각각의 자리수로 나누어야 곱할 수 있으니 나누어서 각 줄에 적어준다.

 

3 b의 1자리수와 a를 곱한 값

4 b의 10자리수와 a를 곱한 값

5 b의 100자리수와 a를 곱한 값

6 b와 a를 곱한 값

 

a  b를 입력받았을 때

(3)  3, 4, 5, 6 순서대로 출력되는 프로그램을 작성한다

"""

 

 

 

과정

(1) 일단 자연수 a * b의 최종값이 잘 출력되는지 확인

 

input을 받을때 미리 int로 바꾸어 주었다.

a = int(input())
b = int(input())

print(a * b)
더보기

값을 지정해서 출력때마다 편하게 작업해보려고 했는데 자꾸 해당 오류가 뜬다..ㅋㅋ

왜이러는거야..

a = 472
b = 385

a = int(input(a))
b = int(input(b))

# 6
print(a * b)

 

472       #자동으로 값이 넣어지고 있음
Traceback (most recent call last):
  File "/Users/diane073/Desktop/realnewprac/backjoonyoong.py", line 28, in <module>
    a = int(input(a))
ValueError: invalid literal for int() with base 10: ''

 

 

 

(2) 10으로 나누어서 자릿수 분리하기

**리스트에 작은 자리부터 순서대로 담김

 

a_list = []

while(number!=0):     #number(자릿수)가 없을때까지 돌려라
    a_list.append(number%10)  #10으로 나눈 나머지를 넣기,  1의 자리수 숫자를 위한 코드. 
    x = x//10    # 10으로 나누었을때의 몫을 구해라, 10의 자리수 이상을 다시 1자리수로 넣어주기

return b_list 를 넣어서 리스트[자연수b]를 반환해준다.

 

 

  • 풀이과정 중 실수한 것
    b_list.append(number % 10) 에서 오류
    TypeError: unsupported operand type(s) for %: 'list' and 'int'

    print(seperate(b_list)) 를 했으니...ㅜㅜ
    네가 만든 seperate는 number=자연수b를 넣고 돌려야하는 함수란다
    = 어디에 어떤 걸 넣어야 하는지 늘 생각하자..
seperate(b) #자연수 를 나누고
print(b_list) # b_list가 잘 나오는지 출력

#결과 : [5, 8, 3] good!

 

 

(3)각 줄에 출력값 적기

 

각각 적어도 되지만,

print(b_list[0] * a)  #3 b의 1자리수와 a를 곱한 값
print(b_list[1] * a)  #4 b의 10자리수와 a를 곱한 값
print(b_list[2] * a) #5 b의 100자리수와 a를 곱한 값
print(a * b)  # 6 a x b

 

어제 했던 한줄에 출력값 적기 활용해보자

print(b_list[0] * a, b_list[1] * a, b_list[2] * a, a * b, sep='\n')

 

 

이렇게해도 잘 나오지만 자동화할겸 연습겸 for문으로 작성해보자

더보기

> 새로운 리스트 만들어 값 출력하기

ab_list = []

for num in b_list:
    num = num * a
    ab_list.append(num)

print(*ab_list, a * b, sep='\n')

  

> b_list에 대체해서 넣어보기

 

list요소를 대체하려면 list요소 자체를 대체하거나, 지우고 넣을 수 있을 것 같다.

대체하거나 지우기.. pop도 쓸 수 있을까?

단, remove()는 for문 사용시 0 1 2 차례로 도니까

0을 지우고 0자리로 밀려온 (구)1은 두고, 1 자리로 밀려온 (구)2를 지울 수 있으니 제외한다.

 

list 요소 대체 방법은

 a_list[0] = 'e'

리스트 각 index에 직접 대체하고자하는 값을 지정해준다.

 

for idx, num in enumerate(b_list):
    num = num * a
    b_list[idx] = num

#print(b_list) 여기서 잘 들어갔는지도 한번씩 확인해보기
print(*b_list, a * b, sep='\n')

 

결과출력 굿굿 for 활용도 꾸준히 연습하자!

 


느낀점: 

꼼꼼히 하나하나 공부하려다보니 자꾸 시간이 많이 걸린다.

10시반에 시작한거 같은데 벌써 12시가 넘은 걸 보니..

시간이 남을때마다 더 많이 풀고 속도를 올릴 수 있도록 해야겠다

 

아직은 느리니까 9시 전에 시작하든,  전날에 미리 분석하고 자든 해야될듯.