본문 바로가기
# 공부/# 그 외 흥미로운 문제들

[숫자놀이?] 특정 값에 4를 곱하면 숫자 배열이 거꾸로 나오는 문제

by 쁘레레레레레 2021. 10. 15.

# 현재 대학생이며 이는 특정 강의의 과제로 나왔던것이며

# 직접 이 문제를 풀었으며 이는 그 과제 풀이에 대해 관련이 없습니다.

# 베끼러 온 분은 뒤로가기 눌러주세요.

 

현재 듣는 강의에 python을 사용하는데 과제에 매우 흥미로운 내용이 나왔다.

사실 python은 재미도 없고 문법도 거지같아서 싫어하지만 문제 자체는 흥미로웠다.

 

사실 상당수의 교수님들의 공통적인 특징이겠지만, 똑똑하신데 설명을 못하신다.

문제를 제목과 비슷하게 해놓고 해당 예제의 수를 제외한 다른 수를 구하는 프로그램을 써야할것 처럼 설명해놨는데..

 

문제를 다 풀고 전 과제와 난이도의 차이가 급격하게 느껴져서 이상하다 싶었는데 역시나 간단한 문제였다.

 


우선 문제는 이러했다. ABCD * 4 = DCBA가 나오는 경우를 구해라. 라고 나와서 6시간넘게 이 수를 찾으려고 노력을 했다.  보통 이럴땐 인터넷을 사용을 오히려 안하는편이다. 이유는 찾을때 쾌감이 너무 좋아서

그리고 조건은 reverse , join을 사용하라는 문제였는데 사실 이 문제는 백준알고리즘 대부분을 풀어본 나에겐 문제 축에도 못꼈다. 단지 저 수가 아름다워 보였다.

 

오랫동안 찾아 헤매다 결국 검색을 해보았다. 아니 프로그래밍을 시키면서 공식을 안알려준다고? 생각하면서

PowerPoint Presentation (decisionprofessionals.com)

위와 같은 pdf파일을 찾았는데 문제는 완전히 같았다.

하지만 위 pdf파일은 프로그래밍이 아닌 내가 찾던 공식에 대한것이다.

 

알고리즘 관련 글을 적을때도 늘 언급하는거지만 난 공부할때 누군가의 코드를 보지 않는다.

한번이라도 보면 결국 머리에 남아서 어떻게 짜든 그 코드와 흡사하게 짜이기 때문인데, 

그건 내 지식에 전혀 도움이 안되고 오히려 악영향을 끼치고, 반대로 내가 짠 후 다른사람 코드랑 비교해서 이게 더 좋구나 내것이 더 좋구나 하는게 더 도움이 되었다.

 

아무튼 해당 문서를 해석해보자면,

When any number is multiplied by 4, the product is an even number, so A' must be even.

아무 수에 4를 곱하면, 결과는 반드시 짝수일것이다. 그래서 A'은 반드시 짝수이다.

 

And since the product D'C'B'A' has only four digits, we know that 4 x A must be less than 10.

그리고 D'C'B'A'의 결과가 4자리의 수이고, 4 x A가 10보다 반드시 작아야한다는걸 알고있다.

 

From these two conditions, we can infer that A=2. ( It can't be zero because A' = 0 implies that D=5=D', so the right-hand side would be a number bigger than 5000. But the left-hand side would be 4 times a 3-digit number no bigger than 987, so the left-hand side could not be bigger than 3,948)

위 두가지 조건에 의해, 우린 A가 2라는것을 유추할 수 있다.

( A가 0이 될 순없는데, A'이 0이라면 D와 D'은 5를 의미하고 오른쪽 사이드의 값은 5000이상이므로 0이 될 수 없다.(불가능하다.). 하지만 왼쪽은 세자리 숫자의 4배라서 987보다 클 수 없다. 그래서, 왼쪽은 3948보다 클 수 없다.)

 

이후는 귀찮아서 바로 해석해보자면, 4 x D는 무조건 2로 끝나는 숫자여야한다.

그래서 3 혹은 8 둘중 하나이다.  ( 12 , 32 )

여기에 덧붙이자면, A라는걸 2로 유추한 상황에서

2BCD X 4 = D'C'B'2 라는걸 알기때문에

왼쪽 수의 일의 자리인 D와 4를 곱했을때 오른쪽 수의 일의자리인 2가 나와야한다.

여기서 D역시 간단하게 8이란걸 알 수 있는데,

 

이미 왼쪽 수의 천의자리는 2이기에 최소값인 2000에 4를 곱하면 8천이 나온다.

그러면 2BCD X 4 = 8C'B'2 이고 다시 쓰면 2BC8 = 8C'B'2이다.

 

여기서 하나 더 짚어야할게 간단히 생각하면

왼쪽 수의 첫째자리(천의자리)는 연산 후 오른쪽 수의 맨 오른쪽으로 가야한다.

왼쪽 수의 백의자리는 연산 후 오른쪽 수의 십의자리로 가야하고

 

이걸 생각하면 4 X B 가 10이상이면 9천대가 되어버리니 B는 0~2일것이다.

여기서부터 설명이 문서의 설명이 좀 부실해지는데, 우선 2는 첫번째로 제외된다.

2BC8 X 4 = 8C'B'2 가 나오는건 설명했고, 8 X 4 = 32이기에 B'에 3이 더해진다는걸 알고

우린 B'이 10을 넘으면 안되는걸 알기에 B에 2가 들어가고 저 계산이 들어가면 11이 되기에 2는 제외된다.

 

B에 0을 넣게되면 20C8 = 8C'02 라서 B X 4는 0으로 끝나는 수가 들어와야하는데, 이는 불가능하다.

실제로 계산해보면 알 수 있는부분.

 

그러면 B는 남은 1이 자동적으로 되게된다.

 

21C8 X 4 = 8C'12

 

A,B,C의 수가 맞춰졌으니,

여기서 한번 계산해보자 21C8의 8에서 4를 곱하면 32

오른쪽 수의 일의자리에 2를 넣어주고

3을 십의자리에 추가해준다. 

여기서 우린 알 수 있다. 아, 왼쪽 C가 8로 끝나야 되겠구나,하면서

 

그러면 2 혹은 7이다.

이제부턴 대입하면 끝이다.

2128 X 4 = 8512   C,C'이 다름

2178 X 4 = 8712

정답.

 

 

찾다가 알게된건데, 4를 곱하는게 아닌 9를 곱하여 뒤집히는 수를 구하라해도 공식은 같다.

1089 X 4 = 9801인데

더 신기한건 1089 X 4 = 8712이다. 와!

 

이젠 별로 좋아하진 않지만 간만에 수학다운 수학을 만나서 재밌었다.

중2때 프로그래밍 독학전후까진 수학을 항상 90을 넘길정도였지만

고등학교때부턴 놔버려서 최근 이산수학에서 증명만 죽어라하다보니 숫자가 너무 그리웠다.

 

아 다른수업 다 때려치고 프로그래밍만 죽어라 파고싶다. 백준은 문제를 더 내라!