곱셈
문제는 아래와 같습니다.
복잡한 곱셈식을 직관적으로 푸는 방법 중 하나입니다.
단순하게 주입식 교육으로 인해서 저 또한 어떤 원리로 곱셈을 하는 지 알고 있지 몰랐습니다. 하지만 이 문제를 접하고 나서는 이 문제 곱셈의 방식의 원리를 알게 되었습니다.
4 7 2 x 3 8 5 가 계산해야 할 식이라고 한다면, 3 8 5 를 모두 자릿수에 맞춰 분해하는 것 입니다. ( 300 + 80 + 5)
이후 곱한 값을 모두 더 해주면 4 7 2 x 3 8 5 와 같은 결과를 기대할 수 있습니다.
입력 조건은 입력을 하나씩 총 2번을 받게 되고 위 방식의 곱셈 과정을 모두 출력해야 합니다.
385를 300 + 80 + 5 로 분해하는 것이 이 문제의 키 포인트라고 생각합니다.
저는 385를 분해하기 위해서 각 자리를 100 , 10 ,1 로 나누것이 적합하다고 생각합니다. 이를 위해서는 자릿수에 맞게 숫자도 올려줘야 합니다. 그렇다면 저는 반복문을 통해서 385를 하나씩 분해하고 곱하겠습니다.
실제 출력하는 값은 곱셈하는 과정에서 실제 값이 아니라 직관적인 값입니다. 실제 값은 끝에 자릿수 마다 0을 넣어줘야 합니다.
따라서 실제 출력값과 마지막 모두 더해 값을 구하기 위한 누적값을 받겠습니다.
먼저 두번째 입력값을 문자열로 받고 그 문자를 뒤집어 주겠습니다.
그 이후 반복문에서 5 80 300 을 실제로 곱한 값을 계속 누적해 저장하는 변수 하나와 단순하게 5,8,3을 곱해서 출력하는 변수를 할당하겠습니다. 코드는 아래와 같습니다.
first_000 = int(input())
second_000 = input()
second_000 = second_000[::-1]
result = 0
for i,j in enumerate(second_000):
note = int(f"{j}{'0'*i }")
result += note*first_000
print(first_000 * int(j))
print(result)
다음으로는 정답 비율을 분석해보고 어느 부분에서 틀렸는지 에측하겠습니다. 또한 마지막으로 다른 사람의 오답 코드를 같이 보겠습니다.
이전 문제들과 달리 갑작스럽게 정답 비율이 크게 떨어진 걸 확인할 수 있습니다.
저희가 정답 비율이 40%대 였던 것은 map 함수와 split 을 처음 접한 문제를 제외하고 존재 하지 않았습니다.
하지만 이 문제에서는 어떠한 새로운 함수가 나오지 않았습니다. 아마 알고리즘을 짜는 과정에 있어서 논리의 모순이 있어 틀릴 거 라고 생각합니다.
아래는 오답 처리 된 다른 사람의 풀이입니다.
코드는 깔끔하고 직관적입니다. 이런 코드가 매우 잘 짠 코드라고 생각하며 앞서 제가 제시한 코드보다 더욱 좋다고 생각합니다.
저와 같이 b를 문자열을 보고 직접 인덱싱하여 계산한 결과를 처리한 거 같습니다.
하지만 인덱싱의 순서가 잘못되어 오답처리가 된 케이스입니다. 이런 경우는 흔치 않은 케이스입니다.
아래는 또 다른 사람의 풀이입니다.
이 경우는 직접 리스트컴프리헨션 즉 사실상 반복문을 통해 저 와 같은 방식으로 분해해 곱해줘 sum() 해준 결과를 출력했습니다.
하지만 이 케이스를 들고온 이유는 무턱대고 import sys를 하시면 안된다는 것을 알려주기 위함입니다.
주어진 코드에서 틀린 이유는 input().split("\n")을 사용하여 두 줄의 입력을 받으려고 했지만, input()은 한 줄씩만 읽기 때문에 split("\n")이 제대로 동작하지 않습니다. 따라서 두 번째 줄의 입력을 제대로 받지 못해 오류가 발생합니다.
input() = sys.stdin.readline().strip() 바꿨다면 올바른 코드로 될 것입니다.
또 다른 많은 케이스를 본 결과 보통 리스트로 접근해서 풀었습니다. 하지만 이런 사소한 실수를 많이 하여 정답 비율이 떨어진 거 같다고 생각합니다.
'BaekJoon Reivew' 카테고리의 다른 글
단계별로 풀어보기 백준_10171번 (0) | 2025.02.03 |
---|---|
단계별로 풀어보기 백준_11382번 (1) | 2025.02.03 |
단계별로 풀어보기 백준_10430번 | 연산자 운선수위 | (0) | 2025.02.02 |
단계별로 풀어보기 백준_10430번 (0) | 2025.02.02 |
단계별로 풀어보기 백준_18108 (0) | 2025.02.02 |