웹개발자공부/Failure note

불필요한 변수 및 연산 삭제를 통한 소스코드 가독성 개선

박더그 2022. 9. 28. 13:55

-목표-

 

값을 입력하면 1에서부터 해당 값 사이 소수의 합을 출력합니다.

 

 

-의도한 풀이 방법-

 

1. for문을 사용하여, 1부터 입력값 사이의 소수를 추출합니다.

2. 추출된 소수를 빈 배열에 담습니다.

3. 배열에 담겨진 수들을 모두 합합니다.

4. 결과값을 출력합니다.

 

 

-초기 작성 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function sumPrime(n) {
  let sum = 0;
  //소수의 합을 누적시킬 변수 선인
 
  let arr = [];
  //소수를 담을 빈 배열 선언
 
  for (let i = 2; i <= n; i++) {
    let count = 1;
    /*소수 판변을 위한 count를 선언,
    count가 2가 되면 소수, 1또는 3이상이면 소수가 아님*/
 
    for (let j = 2; j <= i; j++) {
      if (i % j === 0) {
        count = count + 1;
      }
    }
 
    if (count === 2) {
      arr.push(i);
      //count가 2인 j값(소수)를 arr에 담음
    }
  }
 
  for (let i = 0; i < arr.length; i++) {
    sum = sum + arr[i];
    //소수로 이루어진 배열 arr를 돌며 sum에 누적시킴
  }
  return sum;
  //소수의 합계를 반환
}
cs

 

 

-검토-

 

완성은 되었으나 가독성이 매우 떨어집니다.

불필요한 변수 및 연산의 개선이 필요해보입니다.

 

 

-수정 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function sumPrime(n) {
  let sum = 0;
  //소수의 합을 누적시킬 변수 선인
 
  for (let i = 2; i <= n; i++) {
    let count = 1;
    /*소수 판변을 위한 count를 선언,
    count가 2가 되면 소수, 1또는 3이상이면 소수가 아님*/
 
    for (let j = 2; j <= i; j++) {
      if (i % j === 0) {
        count = count + 1;
      }
    }
 
    if (count === 2) {
      sum = sum + i;
      //소수의 합을 sum에 누적시킴
    }
  }
  return sum;
  //소수의 합계를 반환
}
cs

 

 

-수정 내용-

 

1. 소수를 담을 배열 삭제

2. 소수로 판별되면 해당 값을 바로 소수 합에 누적

 

 

-개선 결과-

 

1. 불필요한 변수를 삭제하여 메모리 할당을 줄였습니다.

(아주 미비하지만😁)

2. 전체적인 줄 수가 줄어들어 가독성이 개선되었습니다.