본문 바로가기
알고리즘/[PRO] 삼성 SW 역량 테스트 B형

인라인(inline) 함수 - 삼성 SW 역량 시험 환경

by 피로물든딸기 2021. 5. 19.
반응형

삼성 B형 전체 링크

 

결론부터 이야기하면, 삼성 SW 역량에서 inline 함수는 쓸모없다.

 

Visual Studio에서 inline 함수와 inline이 아닌 함수, 그리고 MACRO 함수의 속도를 비교해보자.

그리고 삼성 SW 역량 테스트 환경에서 비교해보겠다.


먼저 Visual Studio에서 inline 함수를 사용하려면 최적화 설정을 변경해야 한다.

 

솔루션 탐색기에서 마우스 오른쪽 버튼을 클릭한 후 속성으로 들어가보자.

 

구성 속성에서 C/C++최적화를 클릭한 후 인라인 함수 확장에서 __inline만 확장을 선택한다.

 

이렇게 설정하지 않으면 inline 키워드를 추가해도 인라인 되지 않는다.


Visual Studio에서 실행 시간을 확인하는 방법은 링크를 참고하자.

 

아래의 코드는 두 변수 중 더 큰 값을 return하는 일반 함수, 매크로 함수, inline 함수를 비교한다.

#include <stdio.h>
#include <time.h>

#define MAX_VALUE(A, B) (((A) > (B)) ? (A) : (B))

int max(int a, int b)
{
	return (a > b) ? a : b;
}

inline int max_value(int a, int b)
{
	return (a > b) ? a : b;
}

int main()
{
	int TESTCASE = 100000000;
	int TIME = 0;

	{
		TIME = 0;
		clock_t start = clock();
		
		for (int tc = 1; tc <= TESTCASE;tc++)
		{
			int a = 3, b = 4;
			int originalMax = max(a, b);
		}

		TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);

		printf("ORIGINAL MAX TIME : %d ms\n", TIME); /* ms 단위로 출력 */
	}

	{
		TIME = 0;
		clock_t start = clock();

		for (int tc = 1; tc <= TESTCASE;tc++)
		{
			int a = 3, b = 4;
			int macro = MAX_VALUE(a, b);
		}

		TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);

		printf("MACRO MAX TIME : %d ms\n", TIME); /* ms 단위로 출력 */
	}

	{
		TIME = 0;
		clock_t start = clock();

		for (int tc = 1; tc <= TESTCASE;tc++)
		{
			int a = 3, b = 4;
			int inlineMax = max_value(a, b);
		}

		TIME += ((int)clock() - start) / (CLOCKS_PER_SEC / 1000);

		printf("INLINE MAX TIME : %d ms\n", TIME); /* ms 단위로 출력 */
	}

	return 0;
}

 

실행 결과는 아래와 같다.

매크로 함수와 inline 함수가 성능이 훨씬 더 좋다는 것을 알 수 있다.


이제 위의 코드를 SW Expert Academy에서 실행해보자.

PRO/B형에서는 library를 사용할 수 없기 때문에 <time.h>는 사용할 수 없지만,

사외 사이트의 문제들은 가능하다. 아무 문제나 선택해서 코드를 실행해보자.

 

실행 결과는 아래와 같다.

inline 함수와 일반 함수의 속도 차이가 없다는 것을 알 수 있다.

 

실제 시험 환경에서 inline이 사용 가능하도록 수정할 수 없다.

따라서 삼성 SW 역량 시험에서 inline 함수사용할 필요가 없다.

반응형

댓글