2024-02/24 코드카타

원녕·2024년 2월 23일
0

코드카타

목록 보기
3/5
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문부터 제대로 걸어주지 않았다.
아주 간단한 문제였는데 주먹구구식 풀이를 해버렸다. 내가 맞은건 딱 for2개 걸어주는 조건식까지였다.

그리고 아주 흥미로워보이는 코드 두개를 들고왔다

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; // Initialize sum variable
        
        // Determine the direction of iteration based on 'a' and 'b'
        int increment = (a <= b) ? 1 : -1;
        
        // Iterate from 'a' to 'b' or vice versa, depending on the direction
        for (int i = a; i != b + increment; i += increment) {
            sum += i;
        }
        
        return sum; // Return the calculated 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가된다. 
profile
메타인지하는 개발자

0개의 댓글