알고리즘 계산 시간
백준 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 |