백준 알고리즘

백준 2588번 파이썬 문제풀이 (곱셈)

고인호 2022. 10. 11. 22:41
반응형

백준 2588번 파이썬 문제풀이 (곱셈)


<문제>

 

2588번 문제의 내용은 아래와 같습니다. 

 

 

곱셈 

 
 

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

예제 입력 1 복사

472
385

예제 출력 1 복사

2360
3776
1416
181720

 

 

<작성한 코드>

 


 

 

<코드 풀이>

생각해보면 굉장히 단순하고 쉬운 문제이지만 처음에 풀때 방향이 두가지로 머릿속에 잡혀서

어떤 방식이 더 효율적이고 좋을까를 생각하느라 꽤나 고민을했던 문제다.

 

일단 main으로 잡은 방향은 다음과 같다. 

세자리수 곱하기 세자리수의 연산방법을 그대로 적용하여 

 

1. 세자리수 X 일의자리 

2. 세자리수 X 십의자리

3. 세자리수 X 백의자리

 

총 3번의 연산으로 나누어 계산한다.

 

이 기본 사고는 유지하고 문제 해결방법을 두가지 정도로 생각해보았다. 

 

 

 

1) 추천하지 않는 방향

나와 같은 방법을 고민한 사람이 있을지는 모르겠으나 다음과 같은 방법은 추천하지 않는다. 

곱하는 수의 일의자리, 십의자리, 백의자리 숫자를 각각 분리해내기 위해서 

% 연산자를 사용해 숫자를 떼어내는 방법. 

 

이 방법을 사용하면 코딩과정이 길어지고 비효율적일 뿐만 아니라 

위에서 문제가 요구하는 바처럼 뒤에 '0'값이 생략된 채로 결과값을 얻기가 어렵다. 

 

 

 

 

 

2) 추천하는 방향 (b 값을 처음부터 문자열로 받아 인덱싱하기)

추천하는 방향은 다음과 같다.

먼저 a 값은 숫자형으로, b값은 문자열로 입력 받는다. 

 

 

 

첫째줄에는 a 값과 b값의 일의 자리가 곱해진 값이

둘째줄에는 a 값과 b값의 십의 자리가 곱해진 값이

셋째줄에는 a 값과 b값의 백의 자리가 곱해진 값이

출력되어야 하기때문에 

각각의 줄에서 b[2], b[1], b[0] 의 자리에 해당하는 문자열을 인덱싱한다. 

이때 그냥 a*b[2] 와 같은 방식으로 작성하면 안된다. 우리가 인덱싱한 b[2]는 현재 문자열이기때문에 

b의 자료형을 숫자로 바꿀 수 있도록 int 함수를 사용해 주어야한다. 

 

 

 

 

마지막으로 첫째줄부터 셋째줄까지 출력한 숫자값들을 모두 더해서 최종 계산 결과를 출력해도 괜찮지만

결국 그냥 a 곱하기 b의 값을 출력하기만하면 되는 것이라, 

를 사용해서 마지막 줄에 해당하는 부분을 작성했다. 

반응형