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

- 아주 간단한 문제이지만

- 시간 제한과 매우 큰 테스트 케이스 사이즈 인 문제이다.

- cin.tie(NULL);
 -ios_base::sync_with_stdio(false);

-자료구조 실습 때나 문제해결기법 실습 때 c말고 c++ 을 쓰는 학생들도 있었기 때문에

 실습 문제의 아래 cin/cout을 사용할 경우 위에 저것을 선언해주어라

- 는 말이 항상 있었는데 구체적으로 어떤 역할을 하는지가 궁금해져서 이 기회에 알아보았다.

< cin.tie(NULL) >

default값은 cout,cin이 tie 되어 있다.

이것을 untie 하겠다.라는 것

이경우 라면 program 이 user에게 입력을 요구하기 전에 output이 flush 된다.

(기본적으로 cout의 output은 buffer가 가득차거나 수동적으로 flush 시켜전까지는 출력되지 않는다.)

만약 cin과 cout을 untie 한다면, cin으로 입력을 받기 전에 뭔가를 띄우고 싶다면 매번 수동적으로 cout을 flush 시켜줘야 한다.

 

ios_base::sync_with_stdio(false);

c 표준 stream과 c++ 표준 stream 의 동기화를 끊는다.

default는 모두 동기화 되어 있다 그래서 우리는 c,c++ 입출력 방식을 자유롭게 쓸 수 있다.

printf도 쓸 수 있고 cout도 쓸 수 있따.

이 동기화를 끊어 주면 c++ stream들은 독립적인 버퍼를 갖게되고, c와 혼용해서 쓰는 것이 위험해진다.

그리고 동기화된 c++ stream 은 thread-safe 하다.( 다른 thread의 output이 동시에 엑세스 해도 충돌하지 않는다.

동기화를 끊으면 사용하는 버퍼의 수가 줄어들기 때문에 실행속도 자체는 향상된다.

 

출처:https://codecollector.tistory.com/381

찾아보고 직접 코드를 작성하여 실행 해보았는데 나는 untie를 하고 나서

내가 스스로 flush를 해주지 않았는데도 출력이 잘 되었다...왜지?

 

*아 그리고 endl과 '\n'의 차이

이 문제에서 위의 두 사항을 모두 적용하고 출력해보았는데 

시간초과가 나왔는데 그 차이는 endl과 '\n' 의차이 였는데

endl은 개행만 해주는 것이 아니고 내부 버퍼도 비워주기 때문에 '\n'에 비해서 매우 느리다.

이것또한 알아두자 .

 

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 2164 카드2  (0) 2019.11.13
백준 2839 설탕배달  (0) 2019.11.10
백준 1085  (0) 2019.11.09
백준 11365 !밀비 급일  (0) 2019.11.06
백준 1002  (0) 2019.11.06

https://www.acmicpc.net/problem/1085

- 현재 한수의 위치 x, y  그리고 직사각형이 가로변의 길이와 높이가 입력으로 차례대로 들어온다.

- 직사각형이므로 가로로 쭉뻗은 두 변과 세로로 쭉 뻗은 두 변이 있을것이다

- 좌표평면을 생각해서 4가지 방향으로 가는 길중 가장 짧은 길을 찾아 그 값을 출력하면 된다.

 

1085번: 직사각형에서 탈출

첫째 줄에 x y w h가 주어진다. w와 h는 1,000보다 작거나 같은 자연수이고, x는 1보다 크거나 같고, w-1보다 작거나 같은 자연수이고, y는 1보다 크거나 같고, h-1보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 2164 카드2  (0) 2019.11.13
백준 2839 설탕배달  (0) 2019.11.10
백준 15552 빠른입출력  (0) 2019.11.10
백준 11365 !밀비 급일  (0) 2019.11.06
백준 1002  (0) 2019.11.06

https://www.acmicpc.net/problem/11365

- 한줄 씩 입력을 받으면서

  들어온 문자들의 역순으로 출력을 해주면 된다.

- scanf를 통해서 입력을 받는다 (\n) 이 나올 때 까지 한줄씩

- 길이를 체크해서 반대로 출력해주면 된다.

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 2164 카드2  (0) 2019.11.13
백준 2839 설탕배달  (0) 2019.11.10
백준 15552 빠른입출력  (0) 2019.11.10
백준 1085  (0) 2019.11.09
백준 1002  (0) 2019.11.06

https://www.acmicpc.net/problem/1002

- 터렛문제이다.

- 학점에 신경쓰자고... 다른 공부를 하다가 이제 꾸준히 백준을 하루에 조금씩 풀어야겠다고 생각하고

  푼 첫 번째 문제이다.

- 처음에 든 생각은 map을 만들어서 탐색을 할까 했는데

  요구하는 조건(몇개의 위치가 가능 -> 몇개의 점에서 만나는지) 그리고 값의 범위(2만)

  을 보니 이 방법은 좋지 않겠다고 생각.

- 그래서 두 점과 점사이의 거리와 입력으로 들어오는 r1,r2를 비교하면

  원이 어떤식으로 만나는지가 분류가 된다는 생각.

 

 

'학부생 공부 > 연습문제(백준)' 카테고리의 다른 글

백준 2164 카드2  (0) 2019.11.13
백준 2839 설탕배달  (0) 2019.11.10
백준 15552 빠른입출력  (0) 2019.11.10
백준 1085  (0) 2019.11.09
백준 11365 !밀비 급일  (0) 2019.11.06

+ Recent posts