알고리즘/JAVA

[JAVA] 두 정수 사이의 합 - 프로그래머스

야아옹 2021. 2. 25. 08:45

풀이 : 일반적으로 푼다면 For 문을 사용하여 사이의 값을 배열로 만들어 배열의 합을 구하면 되는 문제

C# 에서는 Enumable.Range 를 사용하여 배열의 시작 지점과 끝을 정하여 배열을 만들 수 있었서 자바도

있지않을까란 생각에 찾아보았지만 없다는걸 알게 되었다.

그래서 구현하기로 생각하여 Iterable<T> 라는 인터페이스를 상속받는 클래스를 만들고 for문 없이(내부는 있음)

진행 을 목표로 다시 풀기를 진행 

import java.util.Iterator;

public class program {
    /* 두 정수 사이의 합
     * 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수,
     * solution을 완성하세요. 
     * 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
     * */
	private static int startNum = 6;
	private static int endNum = 5;
	
	public static class Range implements Iterable<Integer>
	{
		private int startNum;
		private int count;
		
		public Range(int min, int max) {
			this.startNum = min;
			this.count = max - min + 1;
		}

		public Iterator<Integer> iterator() {
	        return new Iterator<Integer>() {
	            private int cur = startNum;
	            private int count = Range.this.count;
	            
	            public boolean hasNext() {
	                return count != 0;
	            }
	            public Integer next() {
	                count--;
	                return cur++; 
	            }
	            public void remove() {
	                throw new UnsupportedOperationException();
	            }
	        };
	    }
	}
	
	private static class Solution {
	    public long solution(int a, int b) {
	       long result = 0;
	       Range rg; 
	       
	       if(a < b)
	    	   rg = new Range(a, b);
	       else if(a > b)
	    	   rg = new Range(b, a);
	       else
	    	   return a;
	       
	       for (int i : rg) {
	    	   result +=i;
	        }
	       System.out.println(result);
	       return result;
	    }
	}
	public static void main(String[] args) {
		Solution sol = new Solution();
		sol.solution(startNum, endNum);

	}

}