문제 설명 |
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. |
제한 조건 |
|
입출력 예 |
||
a | b | return |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
나의 풀이
1. a와 b의 대소관계 구분
2. 작은 수부터 큰 수까지 for문을 이용하여 모든 숫자 합하기
class Solution {
public long solution(int a, int b) {
long answer = 0;
if (a < b) {
for (int i=a; i<=b; i++)
answer = answer+i;
} else if (a > b) {
for (int i=b; i<=a; i++)
answer = answer+i;
} else answer = a;
return answer;
}
}
JAVA1 코드 정리
1. 새로운 함수 sumAtoB 생성
2. Math.min(), Math.max()를 이용하여 대소관계 구분
3. 등차수열의 합 공식을 이용하여 모든 숫자의 합 구함
(등차수열의 합 공식 : (2a+(n-1)d)/2
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a,b), Math.max(b,a)); // 대소관계 구분 내장함수
}
private long sumAtoB(long a, long b) {
return (b - a +1) * (a + b) / 2; // 등차수열의 합 공식
}
}
JAVA2 코드 정리
1. 삼항연산자를 이용하여 for문 안에 대소관계 구분
2. 작은 수부터 큰 수까지 for문을 이용하여 숫자 합하기
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int i=((a<b)?a:b); i<=((a<b)?a:b); i++)
answer += i; // 나의 식 한줄요약
return answer;
}
}
좀 창피한 코딩이었다. 훨씬 압축해서 줄일 수 있는 것을 미련하게 줄줄줄줄 쓴 느낌이다. 문제 자체가 쉬워서 코딩이 길지는 않았지만, 그래도 좀 아쉬움이 많이 남는 코딩이다. 새롭게 배운 점은 ‘등차수열’이다. 그동안 배운 수학을 알고리즘에서도 사용할 수 있으니 참 새로웠다. 저런 아이디어를 바로 적용할 수 있는 사람들이 놀랍다. |
'프로그래머스 > Java | Level1' 카테고리의 다른 글
[프로그래머스/Java]Level1 - 문자열 다루기 기본 (0) | 2020.10.24 |
---|---|
[프로그래머스/Java]Level1 - 하샤드수 (0) | 2020.10.21 |
[프로그래머스/Java]Level1 - 약수의 합 (0) | 2020.10.19 |
[프로그래머스/Java]Level1 - 직사각형 별찍기 (0) | 2020.10.18 |
[프로그래머스/Java]Level1 - 수박수박수박수박수박수? (0) | 2020.10.17 |