SQL로 카운트다운 문제 풀기
카운트 다운 문제는 다음과 같다.
임의의 n개의 자연수가 주어지고 목표로 하는 값 x 가 주어지면
이들 n개의 자연수를 가지고 최대 1번만 사용하여 가감승제 수식을 만들어서 원하는 목표값이 되는 수식을 찾는 것이다.
단 수식에서 교환 법칙및 결합법칙을 사용하여 동일한 식이라도 그 모양이 서로 다르면 서로 다른 식으로 본다.
(ex (1+2) 와 (2+1) 은 두개의 식으로 본다)
예를 들어 1,2,3 이라는 세개의 숫자를 사용하여 9를 만들어보면
(1+2)*3
(2+1)*3
3*(1+2)
3*(2+1)
이 될 것이다.
만약 1,3,7,10으로 210이라는 숫자를 구하면 다음과 같은 수식들이 나온다.
(((1*10)*3)*7)
(((1*10)*7)*3)
(((1*3)*10)*7)
(((1*3)*7)*10)
(((1*7)*10)*3)
(((1*7)*3)*10)
(((10*1)*3)*7)
(((10*1)*7)*3)
(((10*3)*1)*7)
(((10*3)*7)*1)
(((10*3)*7)/1)
(((10*3)/1)*7)
(((10*7)*1)*3)
(((10*7)*3)*1)
(((10*7)*3)/1)
(((10*7)/1)*3)
(((10/1)*3)*7)
(((10/1)*7)*3)
(((3*1)*10)*7)
(((3*1)*7)*10)
(((3*10)*1)*7)
(((3*10)*7)*1)
(((3*10)*7)/1)
(((3*10)/1)*7)
(((3*7)*1)*10)
(((3*7)*10)*1)
(((3*7)*10)/1)
(((3*7)/1)*10)
(((3/1)*10)*7)
(((3/1)*7)*10)
(((7*1)*10)*3)
(((7*1)*3)*10)
(((7*10)*1)*3)
(((7*10)*3)*1)
(((7*10)*3)/1)
(((7*10)/1)*3)
(((7*3)*1)*10)
(((7*3)*10)*1)
(((7*3)*10)/1)
(((7*3)/1)*10)
(((7/1)*10)*3)
(((7/1)*3)*10)
((1*(10*3))*7)
((1*(10*7))*3)
((1*(3*10))*7)
((1*(3*7))*10)
((1*(7*10))*3)
((1*(7*3))*10)
((1*10)*(3*7))
((1*10)*(7*3))
((1*3)*(10*7))
((1*3)*(7*10))
((1*7)*(10*3))
((1*7)*(3*10))
((10*(1*3))*7)
((10*(1*7))*3)
((10*(3*1))*7)
((10*(3*7))*1)
((10*(3*7))/1)
((10*(3/1))*7)
((10*(7*1))*3)
((10*(7*3))*1)
((10*(7*3))/1)
((10*(7/1))*3)
((10*1)*(3*7))
((10*1)*(7*3))
((10*3)*(1*7))
((10*3)*(7*1))
((10*3)*(7/1))
((10*3)*7)
((10*3)/(1/7))
((10*7)*(1*3))
((10*7)*(3*1))
((10*7)*(3/1))
((10*7)*3)
((10*7)/(1/3))
((10/(1/3))*7)
((10/(1/7))*3)
((10/1)*(3*7))
((10/1)*(7*3))
((3*(1*10))*7)
((3*(1*7))*10)
((3*(10*1))*7)
((3*(10*7))*1)
((3*(10*7))/1)
((3*(10/1))*7)
((3*(7*1))*10)
((3*(7*10))*1)
((3*(7*10))/1)
((3*(7/1))*10)
((3*1)*(10*7))
((3*1)*(7*10))
((3*10)*(1*7))
((3*10)*(7*1))
((3*10)*(7/1))
((3*10)*7)
((3*10)/(1/7))
((3*7)*(1*10))
((3*7)*(10*1))
((3*7)*(10/1))
((3*7)*10)
((3*7)/(1/10))
((3/(1/10))*7)
((3/(1/7))*10)
((3/1)*(10*7))
((3/1)*(7*10))
((7*(1*10))*3)
((7*(1*3))*10)
((7*(10*1))*3)
((7*(10*3))*1)
((7*(10*3))/1)
((7*(10/1))*3)
((7*(3*1))*10)
((7*(3*10))*1)
((7*(3*10))/1)
((7*(3/1))*10)
((7*1)*(10*3))
((7*1)*(3*10))
((7*10)*(1*3))
((7*10)*(3*1))
((7*10)*(3/1))
((7*10)*3)
((7*10)/(1/3))
((7*3)*(1*10))
((7*3)*(10*1))
((7*3)*(10/1))
((7*3)*10)
((7*3)/(1/10))
((7/(1/10))*3)
((7/(1/3))*10)
((7/1)*(10*3))
((7/1)*(3*10))
(1*((10*3)*7))
(1*((10*7)*3))
(1*((3*10)*7))
(1*((3*7)*10))
(1*((7*10)*3))
(1*((7*3)*10))
(1*(10*(3*7)))
(1*(10*(7*3)))
(1*(3*(10*7)))
(1*(3*(7*10)))
(1*(7*(10*3)))
(1*(7*(3*10)))
(10*((1*3)*7))
(10*((1*7)*3))
(10*((3*1)*7))
(10*((3*7)*1))
(10*((3*7)/1))
(10*((3/1)*7))
(10*((7*1)*3))
(10*((7*3)*1))
(10*((7*3)/1))
(10*((7/1)*3))
(10*(1*(3*7)))
(10*(1*(7*3)))
(10*(3*(1*7)))
(10*(3*(7*1)))
(10*(3*(7/1)))
(10*(3*7))
(10*(3/(1/7)))
(10*(7*(1*3)))
(10*(7*(3*1)))
(10*(7*(3/1)))
(10*(7*3))
(10*(7/(1/3)))
(10/((1/3)/7))
(10/((1/7)/3))
(10/(1/(3*7)))
(10/(1/(7*3)))
(3*((1*10)*7))
(3*((1*7)*10))
(3*((10*1)*7))
(3*((10*7)*1))
(3*((10*7)/1))
(3*((10/1)*7))
(3*((7*1)*10))
(3*((7*10)*1))
(3*((7*10)/1))
(3*((7/1)*10))
(3*(1*(10*7)))
(3*(1*(7*10)))
(3*(10*(1*7)))
(3*(10*(7*1)))
(3*(10*(7/1)))
(3*(10*7))
(3*(10/(1/7)))
(3*(7*(1*10)))
(3*(7*(10*1)))
(3*(7*(10/1)))
(3*(7*10))
(3*(7/(1/10)))
(3/((1/10)/7))
(3/((1/7)/10))
(3/(1/(10*7)))
(3/(1/(7*10)))
(7*((1*10)*3))
(7*((1*3)*10))
(7*((10*1)*3))
(7*((10*3)*1))
(7*((10*3)/1))
(7*((10/1)*3))
(7*((3*1)*10))
(7*((3*10)*1))
(7*((3*10)/1))
(7*((3/1)*10))
(7*(1*(10*3)))
(7*(1*(3*10)))
(7*(10*(1*3)))
(7*(10*(3*1)))
(7*(10*(3/1)))
(7*(10*3))
(7*(10/(1/3)))
(7*(3*(1*10)))
(7*(3*(10*1)))
(7*(3*(10/1)))
(7*(3*10))
(7*(3/(1/10)))
(7/((1/10)/3))
(7/((1/3)/10))
(7/(1/(10*3)))
(7/(1/(3*10)))
앞서 제출한 퀴즈들
(
)
은 이 문제를 풀기 위한 부분 문제들입니다.
그런데 퀴즈를 제출하고 나서 퀴즈에 대한 답을 푸는 과정에서
마농님이 "SQL로 구문트리화된 수식을 계산하기"에서 제시한 방법을
약간 바꿔서 응용하면 "SQL로 leaf node가 n개인 모든 이진 트리 구조를 구하기" 문제를
풀지 않고도 카운트 다운 문제를 푸는 방법이 있다는 것을 알게 되었습니다.
그래서 "SQL로 leaf node가 n개인 모든 이진 트리 구조를 구하기" 문제와 병행하여
이 문제도 제출합니다.
마농님 덕에 새로운 풀이를 알게 되어 퀴즈를 제출한 보람이 있었습니다.
감사합니다.^^
|