변경이력

돌아가기
7 14개 문자 추가 7개 문자 삭제

2014/12/27 23:42

Shim Won

출처 : [http://codingdojo.org/cgi-bin/index.pl?KataPotter](http://codingdojo.org/cgi-bin/index.pl?KataPotter) 해리포터 시리즈가 시중에 1~5권 까지 나와 있다고 한다. (현재는 더 많은 시리즈가 있긴 하지만..) 책 한권의 가격은 8 EUR 이다. 하지만 다음과 같은 조건으로 책 값을 할인 받을 수 있다고 한다. * 서로 다른 두 권을 구입하면 5% 할인 * 서로 다른 세 권을 구입하면 10% 할인 * 서로 다른 네 권을 구입하면 20% 할인 * 서로 다른 다섯 권(전부!)을 구입하면 25% 할인 여러분은 이제 저마다 쇼핑카트에 가득 해리포터 책들을 담고 있는 손님들을 위해 가장 적은 금액으로 책들을 구입할 수 있도록 도와주는 알고리즘을 작성해야 한다. 예를 들어 다음과 같이 책을 구입한다면 * 2 copies of the first book * 2 copies of the second book * 2 copies of the third book * 1 copy of the fourth book * 1 copy of the fifth book 여러분이 작성한 알고리즘을 이용하면 51.20 EUR 이라는 최저가가 나와야 한다. ---- 테스트 케이스 ```{.no-highlight} def testB_basics assert_equal(0, price([])) assert_equal(8, price([0])) assert_equal(8, price([1])) assert_equal(8, price([2])) assert_equal(8, price([3])) assert_equal(8, price([4])) assert_equal(8 * 2, price([0, 0])) assert_equal(8 * 3, price([1, 1, 1])) end def testS_simpleD_discounts assert_equal(8 * 2 * 0.95, price([0, 1])) assert_equal(8 * 3 * 0.9, price([0, 2, 4])) assert_equal(8 * 4 * 0.8, price([0, 1, 2, 4])) assert_equal(8 * 5 * 0.75, price([0, 1, 2, 3, 4])) end def testS_severalD_discounts assert_equal(8 + (8 * 2 * 0.95), price([0, 0, 1])) assert_equal(2 * (8 * 2 * 0.95), price([0, 0, 1, 1])) assert_equal((8 * 4 * 0.8) + (8 * 2 * 0.95), price([0, 0, 1, 2, 2, 3])) assert_equal(8 + (8 * 5 * 0.75), price([0, 1, 1, 2, 3, 4])) end def testE_edgeC_cases assert_equal(2 * (8 * 4 * 0.8), price([0, 0, 1, 1, 2, 2, 3, 4])) assert_equal(3 * (8 * 5 * 0.75) + 2 * (8 * 4 * 0.8), price([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4])) end ```
출처 : [http://codingdojo.org/cgi-bin/index.pl?KataPotter](http://codingdojo.org/cgi-bin/index.pl?KataPotter) 해리포터 시리즈가 시중에 1~5권 까지 나와 있다고 한다. (현재는 더 많은 시리즈가 있긴 하지만..) 책 한권의 가격은 8 EUR 이다. 하지만 다음과 같은 조건으로 책 값을 할인 받을 수 있다고 한다. * 서로 다른 두 권을 구입하면 5% 할인 * 서로 다른 세 권을 구입하면 10% 할인 * 서로 다른 네 권을 구입하면 20% 할인 * 서로 다른 다섯 권(전부!)을 구입하면 25% 할인 여러분은 이제 저마다 쇼핑카트에 가득 해리포터 책들을 담고 있는 손님들을 위해 가장 적은 금액으로 책들을 구입할 수 있도록 도와주는 알고리즘을 작성해야 한다. 예를 들어 다음과 같이 책을 구입한다면 * 2 copies of the first book * 2 copies of the second book * 2 copies of the third book * 1 copy of the fourth book * 1 copy of the fifth book 여러분이 작성한 알고리즘을 이용하면 51.20 EUR 이라는 최저가가 나와야 한다. ---- 테스트 케이스 ```{.no-highlight} def testB_basics assert_equal(0, price([])) assert_equal(8, price([0])) assert_equal(8, price([1])) assert_equal(8, price([2])) assert_equal(8, price([3])) assert_equal(8, price([4])) assert_equal(8 * 2, price([0, 0])) assert_equal(8 * 3, price([1, 1, 1])) end def testS_simpleD_discounts assert_equal(8 * 2 * 0.95, price([0, 1])) assert_equal(8 * 3 * 0.9, price([0, 2, 4])) assert_equal(8 * 4 * 0.8, price([0, 1, 2, 4])) assert_equal(8 * 5 * 0.75, price([0, 1, 2, 3, 4])) end def testS_severalD_discounts assert_equal(8 + (8 * 2 * 0.95), price([0, 0, 1])) assert_equal(2 * (8 * 2 * 0.95), price([0, 0, 1, 1])) assert_equal((8 * 4 * 0.8) + (8 * 2 * 0.95), price([0, 0, 1, 2, 2, 3])) assert_equal(8 + (8 * 5 * 0.75), price([0, 1, 1, 2, 3, 4])) end def testE_edgeC_cases assert_equal(2 * (8 * 4 * 0.8), price([0, 0, 1, 1, 2, 2, 3, 4])) assert_equal(3 * (8 * 5 * 0.75) + 2 * (8 * 4 * 0.8), price([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4])) end ```
6 2개 문자 추가

2014/12/26 07:38

길가의풀

5 15개 문자 추가

2014/12/26 07:37

길가의풀

4 1110개 문자 추가

2014/12/26 07:37

길가의풀

3 4개 문자 추가

2014/12/26 07:31

길가의풀

2 111개 문자 추가

2014/12/26 07:30

길가의풀

1 Original

2014/12/26 07:29

길가의풀

코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.