[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습 67

[알고리즘 연습] 영지 선택 (DP 맛보기)

영지 선택 세로 H, 가로 W의 영지가 있다. 영지의 각 좌표에는 해당 좌표의 오렌지나무 개수정보가 주어진다. 황제가 나에게 이 중 세로 HH, 가로 WW의 영지를 준다고 한다. 그런데 나는 최대한 많은 오렌지나무를 가지고 싶다. 가능한 모든 경우를 찾아 가장 많은 오렌지나무를 얻었을 때의 개수를 출력하시오. 풀이 #include #include using namespace std; int main() { int h, w, hh, ww, i, j, tmp, max=0; cin >> h >> w; vector oranges(h+1, vector(w+1)); vector doranges(h+1, vector(w+1)); for(i=1; i oranges[i][j]; dor..

[알고리즘 연습] 연속된 자연수의 합 (by. C++)

연속된 자연수의 합 양의 정수 N이 입력 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법 출력 예 : N=15이면 7+8=15, 4+5+6=15, 1+2+3+4+5=15 총 3가지의 경우가 존재한다. 각 경우의 수도 '1 + 2 + 3 + 4 + 5 = 15'의 형태로 출력할 것 (마지막에 경우의 수 출력) 풀이1 (단순접근) #include #include #include using namespace std; int main() { int n, i, p1=1, p2=2, sum, check=0; cin >> n; while (p1

[알고리즘 연습] 교집합(투포인터 알고리즘) (by. C++)

교집합(투포인터 알고리즘) 정수 N을 입력받고 N개의 정수를 입력받는다. (집합A) 정수 M을 입력받고 M개의 정수를 입력받는다. (집합B) 집합A와 집합B의 교집합을 오름차순으로 정렬하여 출력하시오. 풀이 #include #include #include using namespace std; int main() { int n, m, i, p1=0, p2=0, p3=0; cin >> n; vector a(n); for(i=0; i> a[i]; } sort(a.begin(), a.end()); cin >> m; vector b(m); for(i=0; i> b[i]; } sort(b.begin(), b.end()); vector c(m+n); while(p1

[알고리즘 연습] 3등의 점수 (by. C++)

3등의 점수 100점 만점 기준의 점수 배열이 N개 주어졌을 때, 이 중 3등의 점수를 찾아 출력하라. 각 등수별 인원은 무시하고, 점수만이 등수의 기준이 된다. (100점 3명, 98점 3명, 95점 3명이면 95점 3명 모두 3등이다.) 풀이 #include #include using namespace std; int main() { int n, i, one, two, three; cin >> n; vector a(n); for(i=0; i> a[i]; } one = -2147000000; two = -2147000000; three = -2147000000; for (i=0; i

[알고리즘 연습] N!의 표현법 (feat. 소인수분해) (by. C++)

N!의 표현법 정수 N을 입력 받는다. (N>=2) N!을 소인수 분해하고 이를 N! = a b c d ...의 형태로 표현하라. a b c d는 모두 소수로 작은 숫자부터 차례대로 표현한다. N보다 작은 소수만 표기하면 된다. (5! = 3 1 1 이면 소수 2가 3개, 소수 3이 1개, 소수 5가 1개로 소인수 분해된다는 뜻) 풀이 #include #include using namespace std; int main() { int i, j, n, tmp; cin >> n; vector ch(n+1); for (i=2; i

[알고리즘 연습] 석차 구하기 (by C++)

석차 구하기 n 입력. n명의 학생들의 성적이 있다. 이 학생들의 성적을 입력받고, 학생들의 등수를 배열 순서대로 출력하라. ex. 90 85 92 95 90 입력 => 3 5 2 1 3 출력 같은 점수의 학생은 높은 등수로 동일하게 처리한다. 단, 그보다 점수가 낮은 학생은 동일한 점수를 가진 학생들만큼 등수가 내려간다. (1등이 3명일 경우 그 다음은 4등) 풀이 #include #include using namespace std; int main() { int i, j, n; cin >> n; vector a(n); vector b(n); for (i=0; i> a[i]; b[i] = 1; } for (i=0; i