본문 바로가기
개발일지 TIL(Today I Learned)

[2023.06.21] 개발일지

알고리즘 문제의 풀이 과정 중 너무 난잡한 풀이방법을 이용해서 풀었던 4번 문제...

 

두 정수 사이의 합을 구하는 알고리즘을 완성하는 문제다.

function solution(a, b) {
    var answer = 0;
    for (let i = a; i <= b; i++) {
        if (a !== b) {
            answer += i;
        } else {
            answer = i;
        };                // a 부터 b 까지의 모든 수를 더함
    };
    for (let j = b; j <= a; j++) {
        if (b !== a) {
            answer += j;
        } else {
            answer = j;
        };                // b 부터 a 까지의 모든 수를 더함
    };                    // a와 b가 같을 경우 a나 b값 하나만 출력
    return answer;
};

처음 이런 식으로 코드를 짜니 실행에 성공했다.

하지만 다시 한 번 코드를 들여다 보니 내가 하드 코딩을 했다는 것을 알 수 있었다.

여기서 생각을 반대로 전환해보면 코드량을 조금 더 줄일 수 있다는 것을 깨달았다.

function solution(a, b) {
    var answer = 0;
    if ((b - a) >= 0) {        // a가 b보다 크거나 같을 경우,
        for (let i = 0; i <= (b - a); i++) {
            answer += (a + i);
        };                     // a에 i(1씩 커지는 수)를 a와 b의 차이 값까지 차례로 더한 값을 전부 더하는 것을 반복
    } else {                   // a가 b보다 작을 경우,
        for (let j = 0; j <= (a - b); j++) {
            answer += (a - j);
        };                     // a에 i(1씩 커지는 수)를 a와 b의 차이 값까지 차례로 뺀 값을 전부 더하는 것을 반복
    };
    return answer;
};

이 전에는 for문 내에 if문을 넣었더니 for문과 if문을 두 번씩 반복하게 되는 코드가 짜여졌는데

반대로 if문 내에 for문을 넣었더니 if문은 반복할 필요가 없어진 것이다.

 

정말 여러모로 생각의 전환이 중요하단 것을 뼈저리 느끼는 날이었다.

'개발일지 TIL(Today I Learned)' 카테고리의 다른 글

[2023.06.27] 개발일지  (0) 2023.06.28
[2023.06.26] 개발일지  (0) 2023.06.28
[2023.06.23] 개발일지  (0) 2023.06.28
[2023.06.22] 개발일지  (0) 2023.06.28
[2023.06.20] 개발일지  (0) 2023.06.20