728x90
https://www.acmicpc.net/problem/2741
문제 설명
풀이 과정
굉장히 쉬운 문젠데... std::endl이 "\n"보다 느리다는 것을 깨닫게 해준 고마운 문제이기도 하다.
▶ 둘의 속도에 차이가 나는 이유는 무엇일까???
std::endl은 버퍼를 비우고 "\n"은 버퍼를 비우기 않기때문이라고 한다. 말은 쉽지... 도대체 버퍼가 뭔데..??라고 물을 수도 있기에 버퍼까지 덤으로 조사해보았다!!
버퍼는 임시 메모리 공간이다. 입력이나 출력이 바로 이루어지는게 아니라 버퍼에 담아둘 수 있다.
버퍼를 사용하면 얻을 수 있는 장점은
1. 문자를 한번에 전송하므로 전송시간이 적게 걸림
2. 문자를 잘못 입력했을 떄 수정 가능
3. 시스템콜을 적게 하기에 자원을 아낌
이렇게 임시적으로 버퍼에 저장하는 것을 버퍼링이라고 한다. 버퍼링의 방식은
1. 버퍼가 다 찰 때까지
2. 개행문자가 나타낼 까지
따라서 std::endl과 "\n"의 차이는 std::endl은 버퍼를 비우는 동시에 "\n"은 버퍼를 비우지 않는다. 굳이 즉시 출력해야하지 않는다면 "\n"을 모아뒀다가 출력하는 방식으로 사용하는 것이 훨 낫다. (어짜피 코드가 끝날 때 커넬이라는 개행 문자에 의해 버퍼가 비워지기때문이다.)
'Algorithm > string' 카테고리의 다른 글
[백준] 10818 최소, 최대 (C++) (0) | 2022.01.18 |
---|---|
[백준] 1924 2007년 (C++) (0) | 2022.01.18 |
[백준] 11721 열 개씩 끊어 출력하기 (C++) (0) | 2022.01.18 |
[백준] 11721 열 개씩 끊어 출력하기 (C++) (0) | 2022.01.18 |
[백준] 11720 숫자의 합 (C++) (0) | 2022.01.18 |