[Algorithm/TIL] ++와 +=1, i=i+1의 속도차이

김재범·2022년 11월 8일
0

알고리즘을 풀면서 항상 조건이 맞으면
result += 1 이런식으로 1 값을 추가해주는 방식을 사용했다.

그런데, 이번에 풀면서 +=1은 안되고 ++은 효율성을 통과하는걸 보면서 무슨 차이가 있는지 궁금해서 찾아보고 정리하였음.

프로그래머스 lv2 문제

숫자의 표현

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.

1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15

자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

나의 풀이

처음 생각: 반복문을 써서 1,2,3,4,5 ...을 돌면서 n의 값과 같아지면 다시 2부터 더하는 방식을 생각함.

그래서 합계가 n보다 작으면 continue, 합계가 n이 되면 answer++를 해주고 break를 걸면
다시 바깥에 있는 for문이 2부터 돈다.

function solution(n) {
  let answer = 0;
  for (let i = 1; i <= n; i++) {
    let sum = 0;
    for (let j = i; j <= n; j++) {
      sum += j;
      if (sum < n) continue;
      else if (sum === n) answer++; // 이 부분에 answer += 1을 하면 효율성 검사에서 탈락
      break;
    }
  }
  return answer;
}

+=1 과 ++의 차이

  • +=1로 했을 떄

  • ++로 했을 때

  • i = i+1로 했을 때

i++ 연산의 경우에는 다음과 같이 바이트 코드로 컴파일 된다고 한다.

IINC 1 1

그리고 i = i + 1 연산의 경우는 다음과 같은 형의 바이트 코드로 컴파일 된다고 한다.
ILOAD 1 ICONST_1 IADD ISTORE 1

결론

그래서 i = i+1 보다 i++이 빠를줄 알았는데 그것도 아니고
i = i+1, i++, i+=1 셋다 약간의 속도차이가 있고 연산에 따라 빠른것도 있고 느린것도 있더라..

profile
지식을 쌓고 있습니다.

0개의 댓글