class Solution {
public long solution(int a, int b) {
int tmp1 = 0;
int tmp2 = 0;
for (int i = a; i < b; i++){
a += a+tmp1;
tmp1++;
if (a > b){
break;
}
}
for (int j = a; j > b; j--){
a += a-tmp2;
tmp2++;
}
return a;
}
}
3번의 테스트중 2번만 통과하고 1번 실패한 코드 = 틀린 코드
그후 나머지 테스트 모두 fail = 0/100
class Solution {
public long solution(int a, int b) {
long answer = 0;
if (a < b) {
for (int i = a; i <= b; i++) {
answer += i;
}
} else {
for (int i = b; i <= a; i++) {
answer += i;
}
}
return answer;
}
}
위 풀이가 이 풀이와 유사하다고 생각햇는데 착각이였다. 난 if문부터 제대로 걸어주지 않았다.
아주 간단한 문제였는데 주먹구구식 풀이를 해버렸다. 내가 맞은건 딱 for문 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;
}
}
이건 엄청난것같다.. sumAtoB라는 메서드를 만들었는데 해석해보자면
ex) a = 3, b = 5
1. (a+b) / 2 = 8 / 2 = 4
2. (b - a + 1) = 5 - 3 + 1 = 3
3. 4 * 3 = 12
인셈인데 이 연산식 자체도 신기하지만 Math.min,max를 활용할 생각을 한게 대단한것같다.
public long solution(int a, int b) {
long sum = 0;
int increment = (a <= b) ? 1 : -1;
for (int i = a; i != b + increment; i += increment) {
sum += i;
}
return sum;
}
이건 gpt식 풀이다. increment를 정해주고 a가 b보다 작으면 1을 주고 아니면 -1을 줘서
i가 b + increment가 아닐때까지 increment(1 또는 -1)을 누적해준다. 그후에 sum에 i를 누적해준다. 만약 a가 3이면 b+increment , 즉 6이 되기전까지 합산을 해주는 논리다.
sum에는 3+4+5까지가 더해지고 6이 될때쯤 조건이 맞지않아서 for문을 빠져나온다. 그후 return
a가 5여도 마찬가지다 b-increment가 되므로 5+4+3이 되니까 12가된다.