
제목: two equations
+) 문제 지문이 (하지만 화면은 뒤집을 수 있다. -> 하지만 화면은 회전할 수 있다.) 로 바뀌었습니다! 지문을 바꿔서 죄송합니다 ㅠ0ㅠ
(왼쪽에는 이미 카드가 하나 채워져 있는 형태임)
규칙) 카드를 회전하거니 뒤집을 수 없다. 하지만 화면은 회전할 수 있다.
답) 카드를 채워서 두 식에서 나온 값을 a, b (a>=b) 라고 할 때, 가능한 모든 (a, b)에 대해서 10a+b의 곱을 구하시오.
ex) 카드를 채우는 방법에 따라서 두 식에서 나온 값이 (5, 3)이 될 수도 있고 (2, 1)이 될 수도 있으면 답은 53*21=1113이 된다.
힌트) 연산자에는 +, -, *, /도 있지만 |, &, >>, <<도 있다. (비트 연산자)
힌트 2) 이 숫자의 종류에는 0이 존재하지 않는다.
힌트 3) 화면을 안 뒤집은 상태에서 식 하나 만들고, 화면을 뒤집은 상태에서 식 하나 만드세요!
힌트 4) 카드 가운데를 잘라보세요
43275540
식을 만드는 방법은 카드를 배열하고 가운데를 기준으로 잘라서 위쪽은 그대로 보고, 아래쪽은 화면을 회전시켜서 보는 것이다.
가운데를 자르면 로마 숫자가 보이고, 위쪽에는 | 연산자가, 아래쪽에는 + 연산자가 보인다.
이제 식의 값으로 무엇이 나올 수 있는지만 알아내면 된다.
우선 이진수의 표현법에 대해서 말할건데, 2^i를 표현하는 자리를 i번째 비트라고 하자.(실제로 말하는 방식과 다를 수 있음)
예를 들어서 2는 2진수로 표현하면 10이 되고, 0번째 비트는 0, 1번째 비트는 1이다.
위쪽 식에서 나오는 수에 대해서 관찰을 해보자.
우선 숫자카드에 있는 V와 I 둘 다 0번째 비트가 1이다. 그리고 연산자의 개수가 3개이기 때문에 하나의 식에서 독립적인 수의 개수는 5개이다.
숫자카드는 8개이기 때문에 반드시 숫자카드 하나로 숫자를 만드는 경우가 발생한다. 그러면 0번째 비트가 1인 숫자가 존재하게 되고, 위쪽 식의 값은 0번째 비트가 1이어야 한다. (or연산으로 1인 비트가 0인 비트로 바뀔 수 없다.)
V로 생길 수 있는 숫자는 4, 5, 6, 7, 8이다. 그러나 3번째 비트가 양쪽 항에서 나타나려면 VIII 양쪽 항에서 만들어야 해서 I의 개수가 6개 필요한데, I의 개수는 4개밖에 되지 않는다. 따라서 V로 만들 수 있는 숫자는 4, 5, 6, 7이고, 이는 or로 생기는 숫자의 2번째 비트가 1이 된다는 것을 알 수 있다.
0번째 비트가 1이고 2번째 비트가 1이고 3번째 비트는 0이기 때문에 위쪽 식에서 나올 수 있는 수는 5또는 7이라는 것을 알 수 있다.
이제 아래쪽 식에서 나오는 수에 대해서 관찰을 해보자.
아래쪽 식은 덧셈으로 이루어져 있는 식이기 때문에 I 숫자카드가 IV 수를 만드는데 사용되는 횟수에 따라서 아래쪽 식의 값이 바뀐다.
좀 더 정확하게 아래쪽 식의 값은 (V카드의 개수 * 5 + IV를 만드는데 사용되지 않은 I카드의 개수 - IV를 만드는데 사용된 I카드의 개수)/2이다.
V 카드의 개수는 2개이기 때문에 IV 수의 개수는 0개에서 2개까지 될 수 있고, 각각 아래쪽 식의 값은 8, 7, 6이 될 수 있다.
위쪽 식의 수가 5라고 하자. 그러면 위쪽 식에서는 VI라는 숫자가 나와서는 안되고, 이는 아래쪽 식에서는 IV라는 숫자가 나와서는 안 된다는 것을 뜻한다. IV를 만드는데 사용된 I카드의 개수가 0개이기 때문에 아래쪽 식의 값은 8이어야 한다.
위쪽 식의 수가 7이라면 아래쪽 식의 값은 6, 7, 8이 될 수 있다.
4가지 경우에 대한 실례는 아래 제시되어있다.
따라서 정답은 76*77*87*85=43275540이다.