끄적끄적 코딩
article thumbnail
[C++] 백준 11650번 좌표 정렬하기
알고리즘 2019. 8. 30. 23:03

좌표를 정렬하는 문제입니다. x를 기준으로 정렬하고 x가 같다면 y를 기준으로 정렬합니다. vector를 사용하여 값을 넣고 sort함수로 정렬을 합니다. sort함수에 3번째 인자에 함수를 넣어서 첫번째 수 (x) 가 같으면 y를 기준으로 정렬하도록 하게합니다. bool compare(paira, pairb) { if (a.first == b.first) { return a.second < b.second; } else { return a.first < b.first; } } 이렇게 정렬된 수를 차례대로 출력해서 문제를 풀었습니다. #include #include #include #include using namespace std; bool compare(paira, pairb) { if (a.firs..

article thumbnail
[C++] 백준 2108번 통계학
알고리즘 2019. 8. 30. 18:20

평균, 중앙값, 최빈값, 범위를 구하는 문제입니다. 평균 : n개의 입력받은 값을 전부 더한 후 n으로 나누고 +0.5를 해준 후 floor함수로 내림을 해줘서 평균해주어서 구했습니다. 중앙값 : n은 홀수이므로 n / 2 + 1번째 위치가 중앙값입니다. sort한 다음 n / 2 + 1번째 배열을 출력했습니다. 최빈값 : 많이 나온 값들을 vector에 넣어두고 그 값들중 두번째로 작은 값을 출력했습니다. 범위 : 입력받을 때 가장 큰 숫자와 가장 작은 숫자를 계산하였고 가장 큰 숫자 - 가장 작은 숫자를 해주어서 구했습니다. #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) ..

article thumbnail
[C++] 백준 10989번 수 정렬하기3
알고리즘 2019. 8. 30. 15:55

정렬문제입니다. N의 개수가 천만개가 되기 때문에 전부 배열에 넣는것은 어렵습니다. 하지만 입력받는 자연수는 10000보다 작거나 같은 자연수이므로, 10000크기 짜리 배열을 만들어서 입력받은 수의 위치에 +1씩 더해줘서 x의 숫자가 몇번있다는 것을 알 수 있게합니다. 그리고 for문을 돌면서 배열에 값이 들어와 있다면 그 숫자를 배열에 들어와 있는 숫자만큼 출력해주었습니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { int n; int num; int arr[10010]; cin >> n; memset(arr, 0, sizeof(arr)); for (int i = 0; i < n; ++i) { s..

article thumbnail
[C++] 백준 2751번 수 정렬하기2
알고리즘 2019. 8. 30. 15:44

정렬 문제입니다. vector에 값을 넣고 sort함수를 통해 정렬한 후에 출력해주었습니다. cin, 과 cout를 사용하면 시간이 좀 더 오래걸리므로 printf와, scanf를 사용해주었습니다. #include #include #include using namespace std; vector v; int main(int argc, char *argv[]) { int n; int num; cin >> n; for (int i = 0; i < n; ++i) { scanf("%d", &num); v.push_back(num); } sort(v.begin(), v.end()); for (int i = 0; i < v.size(); ++i) { printf("%d\n", v[i]); } return 0; }

article thumbnail
[C++] 백준 2750번 수 정렬하기
알고리즘 2019. 8. 30. 15:31

정렬 문제입니다. vector에 값을 전부 담고 sort(v.begin(), v.end())를 하여 오름차순으로 정렬한 후 전부 출력해주었습니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { int n; int num; vector v; cin >> n; for (int i = 0; i > num; v.push_back(num); } sort(v.begin(), v.end()); for (int i = 0; i < v.size(); ++i) { cout

article thumbnail
[C++] 백준 1085번 직사각형에서 탈출
알고리즘 2019. 8. 30. 14:30

현재 위치에서 가장 가까운 변이나 꼭지점과의 거리를 출력하는 문제입니다. 왼쪽, 위, 오른쪽, 아래 이렇게 4방향으로 갈 수 있습니다. 아래와 왼쪽의 경우 0, 0이며, 오른쪽과 위의 위치는 w, h 입니다. 내 위치가 x, y 일 때 1. x와 0과의 거리 (왼쪽) 2. x와 w - x의 거리 (오른쪽) 3. y와 0과의 거리 (아래) 4. y와 h - y의 거리 (위) 네가지를 비교해서 가장 짧은 거리를 출력하면 됩니다.

article thumbnail
[C++] 백준 9020번 골드바흐의 추측
알고리즘 2019. 8. 30. 03:38

소수에 관한 문제입니다. 2를 제외한 짝수는 소수 두개를 더해서 만들 수 있다고 합니다. 2를 제외한 짝수를 만들때 소수의 두개의 차이를 가장 적게해서 만들 수 있는 수를 출력하는 문제입니다. 1. 소수에 대해서 전부 구합니다. 2. 소수를 벡터에 넣습니다. 3. 소수들끼리 더하면서 찾고 짝수가 나오면 수의 차이와 소수 두개를 저장합니다. - 또 나왔을 경우 수의 차이가 적은것의 값과, 소수 두개를 다시 저장합니다. 4. 소수 두개를 출력합니다. #include #include #include #include #define MAXSIZE 10010 using namespace std; int decimal[MAXSIZE]; vector v; int main(int argc, char *argv[]) { ..

article thumbnail
[C++] 백준 2352번 반도체 설계
알고리즘 2019. 8. 28. 00:27

LIS문제입니다. 왼쪽의 수들은 정렬되어 있기때문에 오른쪽의 수들도 가장 많이 정렬되어있는 수열을 찾으면 총 몇개를 연결할 수 있는지 알 수 있습니다. (n^2 = 시간초과) 40000^2으로 1,600,000,000의 처리가 발생합니다. 1초에 약 1억번의 처리밖에 처리하지 못하기 때문에 logn의 방식을 사용해야합니다. lower Bound함수를 사용해서 logn번의 처리로 해결할 수 있습니다. #include #include using namespace std; int main(int argc, char *argv[]) { int n = 0; int len = 1; int arr[40010]; int DP[40010] = {0}; scanf("%d", &n); for (int i = 1; i

검색 태그