'정수'를 '소수'로 착각한 나자신.
쉬운 문제를 어렵게 꼬아서 풀려했던 나자신.
1과 자기자신만 약수로 가지는 소수로 착각해서 이걸 재귀함수를 써야하나... 루트를 써야하나... 생각이 많았다.
하지만 정수는?
자연수(양의 정수)와 0과 자연수에 -를 붙인 음의 정수를 포함한 모든 값을 말한다.
따라서, 그저 주어진 a와 b 범위 사이의 정수값을 더하면 되는 문제이다.
그런데, a와 b도 오름차순으로 주어진 게 아니다. 그래서 둘 중에 누가 큰지를 따져야한다.
class Solution {
public long solution(int a, int b) {
long answer = 0;
if(a==b){
return a;
}
int min = Math.min(a,b);
int max = Math.max(a,b);
for(; min<=max; min++){
answer += min;
}
return answer;
}
}
if문으로 a와 b가 같은 지 우선 확인 후 같다면 a 반환,
아니라면 최대최소를 따져 for문을 돌리도록 짰다.
하지만 생각해보니 최대최소를 따지고 for문을 돌린다면, 같은 값일 때는 어차피 answer에 하나의 값만 더해지기 때문에 굳이 if가 있을 필요가 없었다.
class Solution {
public long solution(int a, int b) {
long answer = 0;
int min = Math.min(a,b);
int max = Math.max(a,b);
for(; min<=max; min++){
answer += min;
}
return answer;
}
}
한결 짧아졌다.
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;
}
}
등차수열의 합 공식을 이용한 방식
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++)
answer += i;
return answer;
}
}
for문 안에 삼항을 쓰는 방식