잡다로그

[C++/코테] 기초 코드 작성 요령 본문

Algorithm

[C++/코테] 기초 코드 작성 요령

날으는다람쥐 2023. 11. 4. 16:20

시간복잡도

  • 컴퓨터는 1초에 대략 3~5억개의 연산을 처리할 수 있다.
  • 변수에 값 대입 (초기화 등), 사칙연산, 반환 등을 1번의 연산으로 침
    → 빅오 표기법으로 시간 복잡도를 표기한다.

공간복잡도

  • 공간 복잡도: 입력의 크기와 문제를 해결하는데 필요한 공간의 상관관계
  • 메모리 제한이 512MB일 때, 약 1.2억개의 int 변수를 선언할 수 있다. (int형 변수는 4byte)
    응용 ex) 크기가 5억(500,000,000)인 배열을 필요로 하는 코드는 메모리 제한을 만족할 수 없는 풀이.

정수 자료형

  • char, unsigned char, short (2 byte), int (4 byte) , long long (8 byte) 자료형이 있다.
  • 자료형이 1byte(8 bit)라는 의미는,  8개의 0또는 1이 들어가는 칸을 이용해 표현된다.
    각 칸은 $-2^7, 2^6, 2^5, .., 2^1, 2^0$ 을 의미한다.
  • $-2^7$인 이유는 2의 보수 개념 관련있다.
  • [위의 사진] 같은 데이터를 자료형마다 다른 숫자로 표현한다.
  • 대부분 int 자료형을 사용하지만, 범위를 넘어가는 수를 저장해야 하면 반드시 long long을 사용해야 한다.
    ex) 80번째 피보나치 수 

 

Integer Overflow

char 자료형의 연

  • 자료형의 범위를 벗어나 연산 결과에 오류가 발생하는 현상
  • 변수를 형변환하여 자료형을 바꿈으로 해결할 수 있다.
  • [해결] ex) unsigned long long 범위를 넘어서는 수를 저장해야 한다면, string을 활용해서 저장한다. 

실수 자료형

  • float (4 byte=32bit(칸))형과 double(8 byte)형이 있다.
  • ex) 3.75 를 2진수로 표현하려면 $3.75= 2+1+0.5+0.25 = 2^1+2^0+2^-1+2^-2 = 11.11_2$ 즉 11.11이 된다.
  • sign(부호), exponent(지수), fraction(유효숫자) 으로 나뉜다. (IEEE-754 format)
    https://velog.io/@joon10266/C-2.3-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90

실수의 성질

  1. 실수의 저장/연산 과정에서 반드시 오차가 발생할 수 있다.
    상대 오차의 허용 범위가 자료형마다 다르다. float가 메모리를 적게 사용하지만, 실수 자료형은 꼭 double 자료형을 사용한다.
  2. double에 long long 범위의 정수를 함부로 담으면 안된다.
    double의 유효숫자는 15자리이고, long long의 유효숫자는 18자리이기 때문에. 
  3. 실수를 비교할 때는 등호를 사용하면 안된다. 

https://youtu.be/LcOIobH7ues?si=EVxhX2mZhIUjO4FW

https://youtu.be/9MMKsrvRiw4?si=O9d2z459MTxcq3rL

 

Comments