목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 풀이 숫자 카드와 상근이가 가지고 있는 카드를 각각 크기 순으로 정렬, 투포인터로 값을 비교했다.알고리즘엔 이진 탐색이라 되어 있어 이진 탐색으로도 풀어볼 예정 코드 #include #include #include using namespace std; vector Card; vector Com; int N, M; bool cmp(pair a, pair b) { ret..
https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 풀이 가장 작은 수를 0으로 놓고, 그보다 커지면 크기 순으로 값을 매김오름차순으로 정렬 후 첫 번째 원소를 0으로 지정한 후 앞의 원소와 값이 같으면 값을 그대로 받고 아니면 앞 원소 값+1 함. 처음 입력 받은 순서대로 재정렬 후 출력. 코드 #include #include #include using namespace std; vector V;..
https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 나이가 같을 때 순서가 바뀌지 않게 하기 위해 stable_sort() 사용시간을 줄이기 위해 endl 대신 \n 사용 코드 #include #include #include #include #include using namespace std; vector V; bool cmp(pair a, pair b) { return a.first < b.first; } int main() { int N, ag..
https://www.acmicpc.net/problem/2004 2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net 풀이 우선 이 문제를 풀기 전에 아래 문제를 풀면 좋다. (1676번과 같은 알고리즘 사용)https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net - 10의 배수가 n개일 때 0의 개수가 n개이므로 n!을 소인수분해 하여 2와 5의 배수의 개수를 찾는다. - nCm = n! / (n-m)!..
https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 0의 개수 = 소인수분해 시 10의 개수 = 소인수분해 시 2와 5의 개수 중 작은 값 (곱해서 10이 나와야 하니까) 코드 #include int main() { int N, n; int cnt_2 = 0, cnt_5 = 0, cnt; scanf("%d", &N); for (int i = 2; i cnt_5 ? cnt_5 : cnt_2; printf("%d", cnt); return 0; }
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 풀이 - 중복의 경우를 제거해야 했기에 우선순위 큐와 벡터 중 벡터를 선택. cmp 함수 만들어서 원하는 조건으로 정렬함. - cmp 함수는 true 값이 return 될 때 sort 시행됨. 이 경우 return a
https://www.acmicpc.net/problem/3053 3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 풀이 택시 기하학에서 반지름은 R*sqrt(2) 코드 #define _USE_MATH_DEFINES // pi 값 사용 위해 #include #include int main() { double R, S1, S2, pie = 3.141593; scanf("%lf", &R); S1 = R * R*M_PI; R *= sqrt(2); S2 = R * R; printf("%.6f\n%.6f", S1, S2); return 0; }
https://www.acmicpc.net/problem/14495 14495번: 피보나치 비스무리한 수열 피보나치 비스무리한 수열은 f(n) = f(n-1) + f(n-3)인 수열이다. f(1) = f(2) = f(3) = 1이며 피보나치 비스무리한 수열을 나열하면 다음과 같다. 1, 1, 1, 2, 3, 4, 6, 9, 13, 19, ... 자연수 n을 입력받아 n번째 피보 www.acmicpc.net 코드 #include int main() { int n; int F[117] = { 0,1,1,1 }; scanf("%d", &n); for (int i = 4; i