【At Corder】 【초보자】 ABC087B - Coins를 Ruby로 풀어 보았습니다.

소개



AtCoder 에 등록하면 다음에 하는 것 ~ 이것만 풀면 충분히 싸울 수 있다! 과거문정선 10문 ~ - Qiita

이 기사를 참고로 초보자가 At corder에 도전합니다.
목적은 취업 활동에서의 코딩 테스트 대책입니다.
매일 1문을 목표로 하여 갑자기 옵니다

모르는 것은 조사하는 정신입니다. 조금이라도 모르겠다, 라고 생각한 것은 조사해 해설과 참고문헌을 올리므로, 같은 내용으로 모르는 사람이 있으면 참고로 해 주세요

문제 ABC087B - Coins



500엔 구슬을 A장, 100엔 구슬을 B장, 50엔 구슬을 C장 있다. 이들 중에서 몇 장을 선택하고 총 금액을 그냥 X 엔으로 만드는 방법은 몇 가지 있습니까?

같은 종류의 동전은 구별할 수 없다. 두 가지 동전을 선택하는 방법은 특정 종류의 동전에 대해 효과를 선택하는 매수가 다른 경우 구별됩니다.

제약


  • 0≤A,B,C≤50
  • A+B+C≥1A+B+C≥1
  • 50≤X≤20,000
  • A, B, C 는 정수이다
  • X는 50의 배수이다

  • 입력 출력



    입력


    A
    B
    C
    X
    

    출력



    동전을 선택하는 방법의 수를 출력하라.

    입력 예


    2
    2
    2
    100
    

    출력 예


    2
    
  • 500 엔 볼을 0 장, 100 엔 볼을 1 장, 50 엔 볼을 0 장 선택합니다.
  • 500 엔 공을 0 장, 100 엔 공을 0 장, 50 엔 공을 2 장 선택합니다.

  • 답변


    a = gets.to_i
    b = gets.to_i
    c = gets.to_i
    x = gets.to_i
    count = 0
    #入力
    
    for i in 0..a #500円玉の枚数
      x_1 = x - 500*i
      break if x_1 < 0 #マイナスだとループを抜ける
    
      for j in 0..b #100円玉の枚数
        x_2 = x_1 - 100*j
        break if x_2 < 0 
    
        for k in 0..c #50円玉の枚数
          x_3 = x_2 - 50*k
          count += 1 if x_3 == 0
          break if x_3 <= 0 
        end
    
      end
    
    end
    
    puts count
    
    

    해설



    500엔 구슬로부터 평가하도록 했습니다. 그렇게 함으로써 마이너스가 되는 처리의 횟수를 줄일 수 있을까 생각했습니다.
    변수가 많아져 버린 생각이 듭니다만, 배열을 사용하는 등으로 변수를 줄이는 편이 좋은 코드일까요? (좋은 코드라는 표현이 있는지 신비하지만, )

    감상



    이번은 메소드의 사양 이외는 아무것도 참조하지 않고 코드를 쓸 수 있었습니다.
    목적은 달성할 수 있었습니다만, 아직도 부사이크한 곳이 많다고 느낍니다. 웃음
    더 코드 수를 줄일 수있는 방법이 있는지 모색하고 싶네요. .

    좋은 웹페이지 즐겨찾기