백준을 다시 시작했다.
그동안 유니티 끄적거린다고 바쁘다는 핑계로 안했는데
ps도 제대로 못하면 뭘 하겠다는건지....
처음부터 다시 시작한다.
목표는 단계별로 풀어보기 하루에 세 문제 이상 하는것이다.
반복문 챕터부터 시작했다.
오늘 풀이를 하다가 공부한것은 scanf/printf 와 cin/cout , \n 과 endl의 속도 차에 대한 것이다.
이렇게 풀이를 보니 어떤사람은 0ms, 어떤 사람은 4ms가 나왔다.
0ms 코드들의 공통점은 scanf / printf / \n을 사용했다는 점이었다.
처음엔 입출력 함수에서 발생하는 속도차이인줄 알고 버퍼 동기화를 끊는 코드를 추가했으나 속도에 큰 변화가 없었다.
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
그런데 이 방법은 실무에서도 사용하기 힘들고 알고리즘 문제에서 속도 해결하고자 쓰는거라고 하던데,
그럴바에는 입출력이 많을때 차라리 처음부터 scanf/printf를 사용하는것이 좋아보인다.
두 입력방식에 대한 차이는 아직 명확히 이론적으로는 이해하지 못해서, 주말에 좀 더 공부해보고 정리하려고 한다.
아무튼, 이 문제에서 입출력함수에서는 속도변화를 크게 느끼지 못하였고, 차이는 endl을 /n으로 바꾸어 주었을때 나타났다.
endl은 실행 후 출력 버퍼를 비워주는 flush가 포함되어있어 \n보다 느리다.
큰 생각없이 endl을 사용하고 있었는데 속도차이가 상당히 많이 났다.
자세한 수치는 모르겠지만 거의 3~4배 이상 나는 듯하다.
입력속도 비교 참고링크 : https://www.acmicpc.net/blog/view/56
입력 속도 비교
여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일
www.acmicpc.net
입출력 속도 관련 백준문제 : https://www.acmicpc.net/problem/15552
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
'CS > 기타 조각글' 카테고리의 다른 글
[빌드 및 컴파일] opencv static library & aarch64 cross-compile (0) | 2024.12.02 |
---|---|
[복습] 컴퓨터그래픽스 중간고사 대비 복습 (이론) (0) | 2023.04.24 |
[Spark/Linux] 리눅스 환경에 스파크 설치하기 (0) | 2023.04.07 |
[이산수학] 집합과 논리 (0) | 2023.03.08 |
댓글