CODING/스파르타 내일배움캠프 TIL

20_두 정수 사이의 합_개인 과제 정리_튜터님 특강_25.1.9(목)

codingTrip 2025. 1. 9. 21:05

코트카타

22) 두 정수 사이의 합

나의 풀이

public class Ex22 {
    static class Solution {
        public long solution(int a, int b) {
            long answer = 0;
            if (a == b) {
                answer = a;
            }
            while (true) {
                if (a > b) {
                    answer += b;
                    b++;
                    if (a == b) {
                        answer += a;
                        break;
                    }
                } else if (b > a) {
                        answer += a;
                        a++;
                        if (b == a) {
                            answer += b;
                            break;
                        }
                }
            }
            return answer;
        }
    }
    public static void main(String[] args) {
        Solution solution = new Solution();

        solution.solution(3,5);
    }
}

if문을 장황하게 썼다.

 

다른 사람의 풀이

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;
    }
}

등차수열의 합 공식을 이용해서 푸셨다고 한다.

사실 수학시간 기억이 안나서... 잘 모르겠다.

출처:https://school.programmers.co.kr/learn/courses/30/lessons/12912/solution_groups?language=java

 


 

 

오늘은 리팩토링, 주석 및 README 작성을 했기 때문에

큰 문제는 발생하지 않아서 한계점에 대해 말하고자 한다.

 

1) 0으로 나누면 Infinity가 되는 원인 파악하기

과제 실행 결과



if문을 사용해서 0으로 나누지 못하도록 처리했으나,
사실은 try-catch문 ArithmeticException을 사용하고 싶었습니다.
그러나 0으로 나눌 경우, Exception이 아닌 Infinity로 받아져서 예외처리가 안되므로 if문으로 처리했습니다.

 

2) 메서드 반환타입 제네릭을 사용해보기

calculator 메서드에서 반환타입을 제네릭으로 받고 싶었으나,
return result 부분에서 형변환을 하는 방법을 찾지 못해서
double타입으로 두었습니다.

 

3) 람다&스트림 더 활용하기

Scanner 입력받은 값보다 결과값 리스트 값이   경우  값을 출력하도록 구현했습니다.
추후 입력값이 결과값보다 작은 경우 작다는 메시지 출력을 스트림을 사용해서 구현하고 싶습니다.

 


튜터님 특강

List 타입으로 받아오기

private ArrayList<Double> resultList = new ArrayList<>();
private List<Double> resultList = new ArrayList<>();

기존에는 위처럼 ArrayList 타입으로 받았었는데,

이보다는 List타입으로 받는 것이 더 좋다고 말씀해주셔서 수정했다.

추후에 LinkedList로 바꿀 수도 있으므로 확장성을 좋게하기 위해서로 하셨다.

 

면접에 잘 나오는 개념 정리

1) 기본형과 참조형 

기본형 primitive type

참조형 Reference Type

 

이 둘을 쉽게 구분하는 방법을 알려주셨다.

int a = 0;
Book book = new Book();
int[] person = {"철수","영희"};

앞글자를 보고 소문자이면 기본형, 대문자이면 참조형이라고 하셨다.

배열은 예외라고 참조형이라고도 말씀해주셨다.

 

2) 동등성과 동일성

내용 -> 동등성 (equals)

메모리주소 -> 동일성 (==)

 

실제 개발할 때는 잘 사용하지 않는 개념이지만,

면접할 때 잘 나온다고 하시니

메모해 두었다가 꼭 기억해둬야 되겠다.