두 정수 사이의 합
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
입출력 예
a | b | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
문제풀이 IDEA
a부터 b까지의 list를 만들어서 list의 element들을 더해주면 되겠다.
이때 list가 주어졌을때 sum의 값을 출력해주는 함수가 있었으면 좋겠다.
그런데 이 방법은 사실 for문에 +=를 이용하는것보다 복잡하고 안좋은 방법같다.
(괜히 복잡하게 풀려했는지도 모르겠지만 stream의 기능에 대해서 이해하고 넘어간다 생각하자)
나의 코드⭐
2 3 4 5 6 7 8 9 10 11 12 13 14 | import java.util.*;
class Solution {
public long solution(int a, int b) {
ArrayList<Integer> list = new ArrayList<Integer>(); //a부터 b까지의 숫자를 더해야 하므로 a부터 b까지를 가지고
있는 List를 만들어 주기위해서 ArrayList를 사용해준다
for (int i = 0 ; i < Math.max(a,b)-Math.min(a,b)+1; i++){ //반복문을 이용할때 a,b중 list.add(Math.min(a,b)+i); (큰 정수 - 작은 정수 +1)번 만큼 돌아야하므로
} return list.stream().mapToInt(i -> i).sum(); //stream은 반복문의 사용대신 list를 탐색해주고 } mapToint는 각각의 요소에 대하여 int형의 stream으로
} return해주는데 sum을 이용하여 stream의 합을 출력
|
다른 코드1(for과 +=를 이용한 기본적 덧셈) ⭐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Solution { public long solution(int a, int b) { long answer = 0; for(int i=Math.min(a,b);i<=Math.max(a,b);i++){ //나의 방법과 같은데 표기법만 다르게 answer+=i; 작은수부터 큰수보다 작거나 같을때까지 돌림 } return answer; } } |
다른 코드2 (덧셈공식 이용) ⭐
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public long solution(int a, int b) { return sumAtoB(Math.min(a, b), Math.max(b, a)); //함수를 2개를 사용했는데 SumAtoB라는 함수에 } 작은수를 첫번째 인자로 큰수를 두번째 인자로 전달해준다 private long sumAtoB(long a, long b) { return (b - a + 1) * (a + b) / 2; //long a, long b를 인자로 받아서 a부터 b까지의 합 덧셈공식 } a~b 까지의 sum은 (first ele + last ele)*(number of first to last) } |
살짝 더 알아 보자
stream().mapToInt()
mapToInt (str -> str.length())
list내 str의 값을 읽어와 int값인 str.length로 리턴해준다
mapToInt(num -> Integer.parseInt(num))
list내 num의 값이 string으로 저장되어 있다고 해도 해당값을 int로 바꿔서 return해준다
고등학교때까지 배운 덧셈 공식과 같은 편리한 수학공식을 적용하자
꼭 하나의 함수로만 구현할 필요없다.
출처:https://programmers.co.kr
댓글 없음:
댓글 쓰기