블록체인 학습
0 XP
Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.

Chapter 6 마무리 테스트

지금까지 배운 조건문과 반복문을 모두 활용 해 구간을 다루는 컨트랙트를 완성하세요. 범위 판별(조건문)과 구간 합(반복문)을 한 컨트랙트에서 함께 구현합니다.

범위 판별과 구간 합

  • 범위 판별 은 조건식 하나로 표현할 수 있습니다. "x 가 a 이상이고 b 이하" 는 x >= a && x <= b 처럼 논리 연산자 && 로 묶습니다.
  • 구간 합 은 for 반복문으로 누적합니다. 합계를 0 으로 초기화하고, 시작값부터 끝값까지(양 끝 포함) 반복하며 더하면 됩니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
// 패턴 예시: 범위 판별과 구간 곱(참고용)
contract Pattern {
    function within(uint256 v, uint256 lo, uint256 hi) public pure returns (bool) {
        return v >= lo && v <= hi;
    }
 
    function rangeSum(uint256 lo, uint256 hi) public pure returns (uint256) {
        uint256 acc = 0;
        for (uint256 i = lo; i <= hi; i++) {
            acc += i;
        }
        return acc;
    }
}

해야 할 일:

RangeMath 컨트랙트에 아래 두 함수를 구현하세요.

  1. isInRange(uint256 value, uint256 low, uint256 high)
    • public pure, bool 반환
    • value 가 low 이상 high 이하이면 true, 아니면 false
  2. sumInRange(uint256 low, uint256 high)
    • public pure, uint256 반환
    • low 부터 high 까지(양 끝 포함)의 모든 정수의 합을 반복문으로 계산해 반환
    • 예: sumInRange(1, 5) 은 15

isInRange 는 조건식 하나로, sumInRange 는 for 반복문으로 작성할 수 있습니다. 구간이 넓을수록 반복 횟수가 많아져 gas 가 늘어난다는 점도 함께 떠올려보세요.