알고리즘 1일차 내용정리

C++ 기본사항들

0) 알고리즘 헤더 : #include <bits/stdc++.h>를 사용하면 웬만한 기본적인 STL들은 다 사용할 수 있으니까 이것만 사용하면 된다.
하지만 삼성 코딩테스트에서는 사용할 수 없으니까 아래의 라이브러리들은 자주 사용되므로 외우자.
swap, getline, clear, fill, tie, precision, sync_with_stdio, cin, cout
<stdio.h> printf, scanf, puts
<string.h> memcpy, memset, size_t
find, swap, fill, remove, unique, rotate, shuffle, sort, stable_sort, lower_bound, upper_bound, min, max, min_element, max_element, next_permutation, prev_permutation
1) int의 범위 : -2,147~483,648 ~ 2,147,483,647로 즉 20억
그러므로 그 범위를 넘어가는 값이 나올 것 같을 때엔 int가 아닌 long long을 써야함
2) int의 최댓값 선언 꿀팁 :
아래의 값들 중 하나를 골라서 사용하되, 가장 정확한건
#include 를 통해서 INT_MAX 값을 이용하는 방법이겠다.

참고로, long long의 최댓값은 1e18로 선언하면 편하다.
3) 실수형을 쓸 때는 float이 아니라 double을 사용하자
4) 실수형을 쓸 때 정수형으로 입력받고 싶다면 :
scanf를 사용해서 scanf("%d.%d", &m1, &m2)로 6.71 -> 6, 71로 나누어 저장할 수 있도록 하고 실수형 연산은 머리아프니 가급적 피하도록 하자.
5) 따닥따닥 붙어있는 값을 입력받는 법 :
예를 들어 0000, 1000, 1001 이런식으로 값이 다닥다닥 붙어서 입력이 들어온다면 두 가지 방법이 있다.
[1] scanf를 사용해서 형식을 지정해서 값을 입력받아 주자. 예를 들어, scanf("%1d", &input) 이런 식으로 받으면 한 자리의 int만 받겠다는 뜻이 되어 하나씩 쪼개어 받을 수 있다. 참고로, %d - int, %c - char, %s - string, %lf - double, %ld - long long이다.
[2] string으로 변환해서 한 줄씩 모두 입력받는다. cin으로 받을 때는 개행문자(띄어쓰기, 한 줄 띄기)까지 받을 수 있다. 아래와 같이 입력받은 다음에 형변환으로 int를 만들어주거나 문제를 문자로 풀면 된다.

cin >> n >> m;
for(int i = 0; i < n; i++) {
  cin >> s;
}

6) cin이 개행문자까지 받을 수 있다면, 개행문자를 포함하는 입력을 받으려면 어떻게 해야할까 :
이럴 땐 getline으로 입력값을 받으면 된다. 예를 들어 "마라탕 먹고싶다"를 입력받고 싶다면 아래와 같이 코드를 구성하면 된다.

#include <bits/stdc++.h>
using namespace std;
string s;
int main() {
    getline(cin, s);
    return 0;
}

7) 입력이 계속 이어지는데 도대체 언제 끝나는지 모를 때 :
문제에 입력을 주다가 안 줄때 끝난다고 명시되어 있으면 아래와 같이 짠다.
예를 들어 정수형(int) 입력을 변수 n에 계속해서 입력받는 상황이면 아래처럼 구성한다.

while (scanf("%d", &n) != EOF
while (cin >> n) // cin으로는 이렇게 하면 된다

8) 만약 cout을 사용해 정수부분 + 소수부분 해서 6자리까지 출력하고 싶다면? :
아래 코드를 보면 알겠지만, double 같은 경우 '소수점 6번째 자리에서' 반올림한다. precision은 이 정밀도를 조절해주는 STL 내장 함수이다.

#include <bits/stdc++.h>
using namespace std;
double a = 1.23456789;
int main() {
    cout << a << endl; // 1.23457
    cout.precision(7)
    cout << a << endl;
    return 0;
}
**9) 정답 출력시의 꿀팁** :
형식을 지정해서 출력해야만 할 때는 printf를, 문자열을 출력할 때는 cout을 사용하는게 좋다.
하나의 예시로, 홍철 1 : 지수 2 이렇게 출력하라고 하면 아래처럼 구현하자.
string str = "xxx";
ex) printf("홍철 %d : 지수 %d", a, b);
ex) printf("%.6lf", x); // 소수점 여섯째자리까지 출력
ex) printf("%02d", x); // 숫자 2를 02로 출력
ex) printf("%s", str.c_str()); // printf로 문자열 출력할 때

좋은 웹페이지 즐겨찾기