본문 바로가기

Dev/알고리즘

계산 시간 (백준 10818)

알고리즘 계산 시간


백준 10818 문제를 풀다가 계산 시간에 대해 알아보았다.


10818번 문제는 단순하다.

입력받은 값 중 최대, 최소 값을 구하는 문제


하지만 실제로 풀고 제출을 하면 의문점이 생긴다.

계산시간이 왜 이렇게 오래 걸리지?


제일 처음 제출한 소스코드는 아래와 같다.

#include <cstdio>
using namespace std;

int main(){
	int t,min=1000000,max=-1000000,num;
	scanf("%d", &t);
	while(t--){
		scanf("%d",&num);
		if(min>num){
			min = num;
		}
		if(max<num){
			max = num;
		}
	}
	printf("%d %d\n",min, max);
	return 0;
}
소스코드를 제출해보니 시간이 168MS 가 걸렸다.

다른 문제를 채점할 때 보다 더 많은 시간이 걸린다.
테스트케이스가 많아서 그런것일까?

시간을 줄이기 위해 다른 제출자의 소스코드를 보며 이렇게 저렇게 시간을 줄여보았다.

최종 수정하여 다시 제출한 소스코드는 아래와 같다.


#include <iostream>
using namespace std;

int main(){
	ios::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
	int t,num,min,max;
	cin >> t >> num;
	min = max = num;
	t--;
	while(t--){
		cin >> num;
		min = min>num ? num : min;
		max = max<num ? num : max;
	}
	cout<<min<<" "<<max;
	return 0;
}

iostream : 헤더 바꾸기

ios::sync_with_stdio(false) : c에서 사용하는 scanf, printf와 동기화를 막는다고 함

cin.tie(NULL) / cout.tie(NULL): 입출력을 초기화?

a > b ? c : d : if문을 바꿈


위와 같이 소스코드를 수정하니 112MS로 줄었다.


알고리즘 시험에서 시간초과 / 메모리최적화 등 많은 변수가 생길 수 있으니 여러가지 방법에 대해 숙지해야겠다.


'Dev > 알고리즘' 카테고리의 다른 글

[dijkstra] 백준 1753 파이썬  (0) 2021.11.01
[BFS] 백준 7576 토마토 설명 (python)  (0) 2021.10.27
[DFS] 기본  (0) 2021.10.21
Scanf에 대하여 (백준 10953)  (0) 2018.05.01
소수 구하기 (에라토스테네스의 체)  (0) 2018.04.22