https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 이번에는 입력받은 숫자를 정렬하는 문제. 각 자리수로 분해해서 정렬하면 된다. // C solution #include #include int compare (const void * a, const void * b) { int x = *(int *)a; int y = *(int *)b; return x < y; } int main () { int temp, len = 0; int number[10]; scanf("%d", &temp); for (int i = 0; temp != 0;..
https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 입력받은 숫자들의 통계값을 출력하는 문제. 개인적으로 최빈값을 출력하는 과정이 제일 힘들었다. N이 홀수로 제한되어있기 때문에 중앙값은 구하기 쉽다. 평균의 경우 반올림에 주의하자. 최빈값의 경우, 등장횟수를 다 저장한 후에, max_element 함수를 이용해서 해결했다. max_element의 경우, 주어진 범위 내에서 가장 큰 요소의 첫번째 위치를 반환한다. 예를 들어, {1, 2, 3(1), 2, 3(2..
https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net https://codejin.tistory.com/102 y y) return -1; else if (p1->y > p2->y) return 1; else { if (p1->x x) return -1; else if (p1->x > p2->x) return 1; } return 0; } int main () { int ..
https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 같은 나이에 대해 안정정렬을 하는 문제...인거 같은데 어째서인지 그냥 정렬로 해도 풀리는 느낌이다. 비교함수가 어찌저찌 잘 맞아 떨어졌나보다. // C solution // 왜 되는거지? #include #include typedef struct { int age; char name[101]; }User; int compare(const void * a, const void * b) { User * ..
https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 좌표를 정렬하는 문제. x좌표 먼저 비교하고, 그다음 y좌표를 비교하자. 그리고 동적할당을 할때는 할당 해제하는 것도 잊지말자.... // C solution #include #include // 좌표 구조체 typedef struct { int x; int y; }Pos; // stdlib.h에 있는 qsort에 쓰기 위한 함수. int co..
https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 이 문제의 대략적인 단계는 1. 맨 위의 숫자 pop 2. 그리고 나서 숫자를 뒤로 옮김 을 반복하다가 1개가 남았을때의 카드가 뭔지 구하는 문제이다. 덱으로 해결하려다가, 생각해보니 큐만 써도 해결될 것 같아 큐로 해결하였다. 덱으로도 해결가능하다. #include #include using namespace std; int main () { ios_base::sync_with_stdio(fal..
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 숫자를 정렬하던 기존의 문제와는 달리, 이번에는 문자열을 정렬하는 문제. 비교함수를 작성한 후에, 내장함수를 사용해서 정렬한다. C언어로 풀 때, 원래는 문자열 배열을 사용해서 문제를 해결하려고 했는데, 자꾸 segmentation fault가 떠서, 해결하려다가 도저히 답이 안나와서 그냥 구조체를 만든 후에 해결했다. // C #include #include #include // 문자..
https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 0이 들어온 경우 제일 최근의 수를 제거하여 맨 마지막 존재하는 모든 수를 더하는 문제. C++의 vector를 스택처럼 활용하여 0이 들어온 경우 pop해주고 나머지는 push한 후에 다 더하면 된다. 원래라면 C언어로 해보고자 했지만, 솔직히 있는거 가져다 쓰는게 더 좋을거라고 판단해서 C++로 풀었다. #include #include #include usin..