https://www.acmicpc.net/problem/2588
2588번: 곱셈
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
www.acmicpc.net
문제를 통해 직접 예제에 해당하는 곱셈을 해보면
(3)은 (2)의 1의 자릿수 5와 (1)의 전체 숫자를 곱한 값인 5 x 472 = 2360
(4)는 (2)의 10의 자릿수 8과 (1)전체를 곱한 8 x 472 = 3776
(5)는 (2)의 100의 자릿수 3과 (1)전체를 곱한 3 x 472 = 1416
임을 알 수 있다.
(6)은 (3) + [10 x (4)] + [100 x (5)] = 2360 + 37760 + 141600 = 181720 이다.
(2)에서는 385에서 각 자릿수에 해당하는 값을 뽑아와야 할 것 같은데 리스트를 사용해 풀이 가능해 보인다.
(1)에서는 어차피 전체 값이 다 쓰이기 때문에 굳이 그렇게 할 필요는 없어보인다.
https://www.acmicpc.net/problem/10869
10869번 문제에서 다섯째 줄에 A%B를 출력하는 부분이 있었는데 A를 B로 나눈 나머지 값이였다. 이것을 이용해
(2)%10을 하면 (2)의 1의 자릿수를 추출할 수 있다.(2)%100을 하면 (2)의 10의 자릿수 + 1의 자릿수인 80 + 5 = 85가 추출되는데 여기서 앞서 구한 1의 자릿수를 빼주면 80만 남아 10의 자릿수만 구할 수 있다.마찬가지로 남은 (2)에서 앞서 구한 10의 자릿수와 1의 자릿수를 빼주면 385 - 80 - 5 = 300으로 100의 자릿수를 구할 수 있다는 것을 알 수 있다.나는 여기서 (1)을 a로, (2)를 b로 설정했다. (해당 기호를 그대로 변수처럼 쓰는 방법을 모르겠다)
a = 472
b = 385
print(a)
print(b)
print(a*(b%10))
print(a*(b%100-b%10))
print(a*(b-b%100))
print(a*b)
4번째 줄과 5번째 줄은 처음 생각했을 때 아래 처럼 하면 되겠지 했는데 값이 각각 37760, 141600이 나왔다.
그렇다면 각각 10을 나누고, 100을 나누면 원하는 값인 3776, 1416을 얻을 수 있겠다 생각해서 생각한대로 나눠봤다.
결과는 위와 같이 소수점이 붙어 이를 정수형으로 나타내야겠다고 생각해 int를 붙여줬다.
원하는대로 잘 출력되는 모습이다.
이제 a와 b를 인풋, 정수형으로선언해주면 문제가 해결될 것 처럼 보인다!
A, B = map(int, input().split())
print(a)
print(b)
print(a*(b%10))
print(int(a*(b%100-b%10)/10))
print(int(a*(b-b%100)/100))
print(a*b)
위의 코드를 복사해서 백준에 붙여넣고 제출해봤다.
결과는 런타임 에러... 무엇이 문제일까 런타임 에러쪽을 눌러봤다.
저번에 문제풀 때도 생겼던 에러인데 NZEC에 하이퍼링크가 연결되어있다.
구글링을 통해 알아보니 "NZEC는 Non Zero Exit Code (비제로 종료 코드)를 나타내며, 프로그램이 0이 아닌 종료 코드로 반환되었거나 예외가 있음을 의미합니다."
하이퍼링크를 클릭해서 더 찾아본다.
한번 해당 소스를 그대로 붙여넣고 다시 백준에 제출해본다.
결과는 똑같이 런타임 에러였다..
ㅡㅡㅡㅡ
알고보니 결과에서 괄호 안에 있는 (ValueError)이게 에러의 이유임을 알게됐다.
봐도 솔직히 어떻게 해결해야 할지 감이 잘 안잡힌다.
다행스럽게도 항해99 같은 조원 분들이 도와주셔서 왜 에러가 떴는지 알았다.
문제에서 예제 입력을 두 줄을 사용하고 있어서 인풋을 각각 줄에 따로 넣어줘야함을 알려주셨다.
a = int(input())
b = int(input())
print(a)
print(b)
print(a*(b%10))
print(int(a*(b%100-b%10)/10))
print(int(a*(b-b%100)/100))
print(a*b)
인풋 관련 부분만 수정 후 다시 제출! 이번엔 에러가 안뜨고 틀렸습니다가 떴다...
예제 여러개 넣어봐도 잘 되서 뭐가 문젠가 했다가 정답란에 입력하는 부분은 빼고 출력해야되는 것을 보고 바로 print(a) print(b)를 뺐다.
a = int(input())
b = int(input())
print(a*(b%10))
print(int(a*(b%100-b%10)/10))
print(int(a*(b-b%100)/100))
print(a*b)
결과는!!
'알고리즘' 카테고리의 다른 글
백준 1316 그룹 단어 체커[개인적인 풀이 과정] (0) | 2021.06.16 |
---|---|
백준 4344번 문제 : 평균은 넘겠지 [지극히 개인적인 풀이 과정] (0) | 2021.06.15 |
백준 1110번 문제 [지극히 개인적인 풀이 과정] (0) | 2021.06.14 |
백준 2884번 지극히 개인적인 풀이 과정 (0) | 2021.06.14 |
백준 10869번 문제 개인적인 풀이 과정 (0) | 2021.06.14 |