C++ Realization - 바킹독 (1)

김정욱·2021년 1월 21일
0

Algorithm - 내용(C++)

목록 보기
1/9
post-thumbnail

: 해당 글은 바킹독님의 영상을 통해 깨달은 지식들을 정리했습니다

[ 1. 실수는 double ]

: 실수 사용시 4byte의 float보다 8byte의 double을 사용하자 (오차범위 등 여러측면에서 좋다)

float은 유효숫자가 6자리 --> 상대 오차가 10^-6 까지 인정
double은 유효숫자가 15자리 --> 상대 오차가 10^-15 까지 인정


[ 2. 실수의 비교는 등호 X ]

double a = 0.1+0.1+0.1;
double b = 0.3;
if(abs(a-b) < 1e-12) cout << "same" ;

: 1e-12 = 10^-12 의미!


[ 3. 참조자(&) 사용 with STL]

: STL을 사용할 때 자료구조를 넘기면 값만 복사되며 O(N)의 시간복잡도가 소요된다.
하지만, 참조자(&)를 사용하면 직접 조작도 되며 O(1)의 시간복잡도로 효율적이다!


[ 4. getline() - 공백을 포함한 입력 ]

string s;
getline(cin, s);

: c++에서 공백을 포함한 입력을 받기 위해 <string>getline을 사용!
( <iostream>cin.getline()과는 다름!)


[ 5. cin/cout 그리고 scanf/printf ]

  • scanf/printf 와 cin/cout
    : 기능상 차이는 없지만 cin/cout을 쓸 때 주의할 점이 있다.
    1) ios::sync_with_stdio(0) 작성
    : C++에서는 C의 표준 입출력과 동기화를 위해 stream을 사용
      그래서 입/출력 양이 많으면 시간초과가 날 수 있기 때문에
      해당 명령어로 동기화를 끊어주고! 대신 cin/cout만 사용해야함!!

    2) cin.tie(0) 작성
    : cin과 cout의 stream을 untie 해주는 것!
      default는 항상 cin을 하기 전에 cout의 버퍼를 비워줘서
      입력 -> 출력 -> 입력 -> 출력 이 반복되는 상황순서를 맞춰준다.
      하지만!! 코테에서는 출력만 보기 때문에 이러한 불필요한 연결을 끊어서 성능을 향상시키는 것


[ 6. 개행은 '\n'으로 사용 ]

  • endl은 개행 + 출력버퍼 비우기 기능인데 성능이 떨어지기 때문에 '\n'을 사용

[ 7. 코테는 개발과 다르다(with 종합헤더 / 전역변수) ]

  • 개발은 클린코드가 중요하지만 / 개발은 내가 빠르게 짜는게 중요
    : 전역변수도 사용 / 반복문 줄바꿈 / 종합 헤더 등등!
  • 출력 맨 마지막 공백 or 줄바꿈이 있어도 괜찮다.
  • 디버거는 사용하지 말자
    : 끽해야 코테는 100줄 내외이기 때문에 오히려 꼬일 수 있다.
      (cout을 통해 중간중간 값 확인이 좋다)
  • <bits/stdc++.h> 라는 종합헤더
    : 여러가지 헤더를 모두 종합 --> 실제 코테에서 막는 경우도 존재

profile
Developer & PhotoGrapher

0개의 댓글