정보

[알고리즘] 간단하지만 알면 좋은 최적화들

Gyoogle 2019. 7. 31. 17:29
728x90
반응형

 

알고리즘 문제를 풀면서 최적화에 신경을 써야할 때가 있다. (시간이나 메모리를 줄이는 것이 중요한 B형처럼..)

 

1. for문의 ++i와 i++ 차이

for(int i = 0; i < 1000; i++) { ... }

for(int i = 0; i < 1000; ++i) { ... }

내부 operator 로직을 보면 i++은 한번더 연산을 거친다.

따라서 ++i가 미세하게 조금더 빠르다.

하지만 요즘 컴파일러는 거의 차이가 없어지게 되었다고 한다.

 

 

 

2. if/else if vs switch case

 

'20개의 가지 수, 10억번의 연산이 진행되면?'

 

if/else 활용 : 약 20초

switch case : 약 15초

 

switch case가 더 빠르다. (경우를 찾아서 접근하기 때문에 더 빠르다)

if-else 같은 경우는 다 타고 들어가야하기 때문에 더 느리다.

 

 

3. for문 안에서 변수 선언 vs for문 밖에서 변수 선언

 

임시 변수의 선언 위치에 따른 비교다.

for문 밖에서 변수를 선언하는 것이 더 빠르다.

 

 

4. 재귀함수 파라미터를 전역으로 선언한 것 vs 재귀함수를 모두 파라미터로 넘겨준 것

 

'10억번의 연산을 했을 때?'

 

전역으로 선언 : 약 6.8초

파라미터로 넘겨준 것 : 약 9.6초

 

함수를 계속해서 호출할 때, 스택에서 쌓인다. 파라미터들은 함수를 호출할 때마다 메모리 할당하는 동작을 반복하게 된다. 따라서 지역 변수로 사용하지 않는 것들은 전역 변수로 빼야한다.

 

BFS에서 매개변수를 늘려가는 것보다 전역으로 선언 후 활용하는 것이 훨씬 시간 단축할 수 있는 습관을 기를 수 있다.

 

 

 

아주 작은 차이라고 생각할 수도 있지만, 반복되는 수가 많아지거나 데이터 수가 많아질수록 차이는 더욱 커지므로 기억하도록 하자!

728x90
반응형