허허.. 참.. 웹개발하면서 이런 알고리즘(?) 때문에 고민해보는건 또 간만이군요..
소수점을 써본적도 별로 없는데 말이죠.. ㅡ ㅡ

재미없어도 한번 읽어봅시다. ^^;
다음처럼, 유동적으로 변하는 z에 대한 x, y를 알아내야 하는게 과제입니다.

문제는 다음 조건에서 x와 y를 찾는겁니다.

z = x / y

조건1. z는 소수점 두자리까지의 실수이다. (ex 12.34, 10.1, 43.29, 33)
조건2. x 와 y 은 정수이다.
조건3. 조건1,2만 만족하면 답은 같지 않아도 관계없다.

예를 들면 다음과 같습니다.
문제                    답
x / y = 12.34         x = 617, y = 50
x / y = 10.1          x = 101, y = 10
x / y = 55.55         x = 1111, y = 20

사실 위의 첫 예의 경우 답이라고 되어있는 x = 617, y = 50 가 아니더라도, x = 1234, y = 100 도 가능하지만,
그러면 재미없겠죠? (그리고 제 경우는 그렇게 할수 없는 경우였습니다. )
그럼, 어떻게 해야할까요?


1. z 값과 곱하여 z를 정수로 만들 수 있는 10의 n제곱수 k를 준비한다.
2. 예를 들어 z가 12.34이면 k는 100이다.
3. z*k 와 k의  최대공약수를 구하여, z*k와 k를 나눈다. 그 몫이 찾는 x 와 y 다.

말로 적으니 무진장 어렵내요.  예를 들겠습니다.

z가 55.55 일때.
             z*k         k
        |   5555 ,     100
    5  |____________________
            1111 ,      20

찾고 있는 x와 y 는 1111 와 20 이 되는거죠.
그럼 문제는 (주:아.. 한 백년만에 들어보는 단어였습니다. 최대공약수.... 나누어 떨어지는 수, 즉 약수들중 공통된 가장 큰 약수를 의미하죠. )최대공약수를 찾는 방법이 되겠군요.
그건 태요님 강좌란에 있는 유클리드의 알고리즘 (Euclid`s algorithm) 일명 최대공약수 알고리즘 를 참고해봅시다.


자... 이걸 대체 어디다 쓸까요?
웹에서 이렇게 골치아픈 내용을 다룰 일이 과연 있는걸까요?
불행히도 전 있었습니다. ㅡ ㅡa
주어진 Value 값은 소수점 두자리까지의 실수인데, 이걸 정수형 분수로 만들어야 하는 경우가 말이죠. (우워~)
할수록 웹개발은 어렵습니다. 어디에 사용하는지는 다음에. ^^

2006/09/18 16:39 2006/09/18 16:39
Trackback address :: http://zziuni.pe.kr/zziuni/trackback/236

Comments List

Write a comment.

[로그인][오픈아이디란?]