Algorithm|Data Structure

PS팁

msvscode 2021. 5. 21. 14:31

*PS C++ 언어 작성시 Tip

1)컴퓨터는 보통 1초당 3억에서 5억번의 연산을 한다.
N이 입력의 개수 일때 시간 복잡도 O(N)에 N을 대입 했을때 나오는 값이 연산의 횟수이다.
ex)시간 복잡도 O(N)이 N일 경우 N(입력의 개수가)이 100만일때 100만번의 연산이 필요한 알고리즘 이라는 뜻이다.

2) 컴퓨터가 하는 연산의 개념은 뭔가를 행동하는 것이다 예를들어 변수 대입 및 복사 하거나 입력하거나 연산하거나 비교하거나 이 모든 행동들 하나하나가 하나의 연산으로 봐야한다 그러나 일반적으로 시간복잡도O(N)는 이렇게 세세하게 계산 하지 않고 입력값이 높아질 경우 실제 가장 많은 영향을 미칠 최고차항만을 의미한다

3) 공간 복잡도
512MB = 1.2억개의 int 변수 선언이라는 것 알아두자

4)Integer Overflow 주의하기!

5)실수의 저장/연산 과정에서 반드시 오차가 발생할 수 밖에 없다
  -float : 유효숫자(소수점 이하 정밀도) 6자리
  -double : 유효숫자(소수점 이하 정밀도) 15자리

6)double에 long long 범위의 정수를 함부로 담으면 안된다
  -double이 표현 할 수 있는 범위를 넘어간 long long 값은 전부 담겨지지 않아 오차가 발생 할 수 있다

7)일반적으로 정수 자료형은 int 실수 자료형은 double을 사용한다

8)실수를 비교할 때는 등호를 사용하면 안된다
  -실수는 오차가 발생할 수 있기 때문에

9)함수인자로 int/int배열/구조체/stl배열 을 실어보내서 값을 바꾸었을때 원본의 값이 바뀌는것은 int 배열 밖에 없다 나머지는 그냥 값을 복사하기만 한다. 이때문에 포인터나 참조자 변수로 함수의 매개변수를 선언하여 원본값을 바꿀 수 있다.

10)공백을 포함한 문자열을 출력할때는 getline() 함수를 사용한다
   -printf()나 cout<<은 문자열에서 공백 앞까지만 출력해주기 때문에

11)endl 쓰지말기 -> 개행이 필요할때는 개행문자(\n)을 입력하자
   -endl은 개행문자 포함하고 출력버퍼를 비우라는 명령어인데 PS에서 굳이 출력버퍼를 비울 필요가 없다

12)#include <bits/stdc++.h>
   using namespace std; 입력

13)main함수 안에 ios::sync_with_stdio(false);,cin.tie(nullptr|NULL); 입력
   -c stream c++ stream 동기화 해제 및 버퍼 자동비우기 해제 시켜줌으로써 입출력 시간 잡아먹는걸 막아준다.
   -단 이렇게 하면 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

14)출력 맨 마지막 공백 혹은 줄바꿈이 추가로 있어도 별도로 예외처리를 안해줘도 상관이 없다

15)디버거 사용하기보단 printf나 cout으로 출력을 찍어서 변수값 변화 등을 확인하자

16)문제풀다 30분 넘기면 그냥 바로 구글링해서 솔루션 찾아보고 내껄로 만들자 - 시간 낭비 NO



'Algorithm|Data Structure' 카테고리의 다른 글

어떤 숫자에 0부터 1사이의 랜덤한 값을 곱했을때  (0) 2021.07.06
자료구조와 알고리즘  (0) 2021.06.25
2진수  (0) 2021.05.21