문제
https://www.acmicpc.net/problem/2588
(브론즈 3 문제)
2588번: 곱셈
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
www.acmicpc.net
입력
472
385
출력
2360
3776
1416
181720
내 코드
a=int(input())
b=str(input())
list=[]
for i in b:
list.append(i)
third=a*int(list[2])
fourth=a*int(list[1])
fifth=a*int(list[0])
print(third)
print(fourth)
print(fifth)
print(fifth*100+fourth*10+third)
풀이(생각 과정)
처음에 문제를 보고 리스트를 이용해서 2번째 입력 값을 숫자 1개씩 나눠서 곱셈을 해야겠다고 생각했다.
즉 예제 입력 값인 472에 5를 곱하고 그 후 8을 곱하고 3을 곱하고 이런식으로 (3),(4),(5) 값을 도출하려고 한 것이다.
그 후 (3)x100+(4)x10+(5) 식을 이용해서 (6)의 값을 출력하는 형태로 구현했다.
개선점
1번째로 입력값을 각각 따로 받는 형태였으나 생각을 하지 않고 a,b=map(int,input().split())을 통해서 입력을 받으려고 했었다.
이로 인해서 입력 값 자체를 문제에서 받아들이지 못해서 ValueError가 발생했었다.
2번째로 파이썬의 기초가 모자라서 바로 생각이 나지 않아서 굳이 str로 변환을 해서 두 번째 인수를 받았다. b의 인수를 받는 과정에서 String 형태로 바꿀 필요 없이 바로 input을 통해서 입력을 받을 수 있었다.
b=input()의 형태로 입력을 받을 경우 b는 문자열의 형태로 입력을 받게 된다.
또한 이렇게 문자열을 받을 경우 굳이 리스트를 생성할 필요 없이 b[0]과 같은 방법으로 b의 요소를 하나씩 받을 수 있다.
이 문제에서는 리스트를 생성하고 반복문을 통해서 다시끔 리스트에 넣는 작업은 할 필요가 없는 것이였다.
개선 코드1
a=int(input())
b=input()
third=a*int(b[2])
fourth=a*int(b[1])
fifth=a*int(b[0])
print(third)
print(fourth)
print(fifth)
print(fifth*100+fourth*10+third)
개선점을 바탕으로 개선을 한 코드이다.
다른 풀이
A = int(input())
num = int(input())
print(A * (num % 10))
print(A * ((num % 100) // 10))
print(A * (num // 100))
print(A*num)
나와는 다른 방향성을 가지고 푼 코드이다.
2번째 인수를 굳이 하나씩 분할하지 않고 나머지, 몫 계산을 통해서 구현한 코드이다.
실제 예제인 385의 경우 %10을 이용하면 1의 자리를 구할 수 있고, %100을 하면 10의 자리를 구할 수 있고 몫을 이용해서 100의 자리를 구할 수 있다.
수학적 계산을 통해서 구현한 것을 보고 하나의 방법만 생각하는 것이 아닌 여러가지 방향으로 생각하는 힘을 길러야 한다는 것을 깨달았다.
'알고리즘 공부 > 알고리즘 구현 기초' 카테고리의 다른 글
백준) 과제 안 내신분...?-파이썬 (0) | 2023.06.23 |
---|---|
백준) 공 바꾸기-파이썬 (0) | 2023.06.22 |
백준) 공 넣기-파이썬 (0) | 2023.06.20 |
백준) 주사위 세개-파이썬 (2) | 2023.06.19 |
백준) 오븐 시계-파이썬 (0) | 2023.06.19 |