스터디 34

[알고리즘][C++] 재귀함수

재귀는 스택 자료구조를 이용한다 !! -> 그래서 printf() 위치에 따라 출력 결과가 달라지는 것 stack : .... recur(0) - return 돼서 종료 recur(1) - line 10까지 실행완료 recur(2) - line 10까지 실행완료 recur(3) - line 10까지 실행완료 .... recur(1) - line 11부터 실행 recur(2) - line 10까지 실행완료 recur(3) - lin 10까지 실행완료 .... recur(2) - line 11부터 실행 recur(3) - lin 10까지 실행완료 .... recur(3) - lin 11부터 실행 .... #include #include #include using namespace std; void recur..

[알고리즘][C++] Ugly Numbers (two pointers 응용)

https://y0on-it.tistory.com/72 [알고리즘][C++] 교집합(two pointers) 교집합 배열 생성 전에 (오름차순) 정렬 필요 !!! a 🔽 -> 🔽 2 3 5 7 10 b 🔽 3 5 10 12 17 => a 배열 포인터 증가 (b배열에는 3보다 작은 값이 없으니까) => 포인터 값 증가 후 값 비교 후 같으면 c 배열 y0on-it.tistory.com 1부터 처음부터 카운트해서 하면 ? 너무 오래 걸림 a[p2] * 2 a[p3] * 3 a[p5] * 5 처음에 모두 1로 초기화 a[p2] * 2 =2 a[p3] * 3 = 3 a[p5] * 5 = 5 이 중에서 최소값을 가르키는 포인터만 한칸씩 이동 / 최소값 배열에 넣기 1 2 3 4 5 6 7 8 9 10 11 1 2..

[알고리즘][C++] 멀티태스킹

공주 구하기 문제와 유사한 문제! (pos 변수 이용) 🔽 1 2 3 1 2 3 🔽 1 2 3 0 1 3 🔽 1 2 3 0 1 2 🔽 1 2 3 0 0 2 🔽 1 2 3 0 0 1 #include #include #include using namespace std; int a[2001]; int main(){ //freopen("input.txt", "rt", stdin); int n, i, k, cnt=0, pos=0, total=0; scanf("%d", &n); for(i=1; i=total) { //정전 전에 전부 처리되면 -1 출력 printf("-1"); return 0; } while(1){ pos++; if(pos>n) pos=1; //n보다 커지면 다시 처음으로 if(a[pos]==0) ..

[알고리즘][C++] 공주 구하기

인덱스 1~8, 전부 0으로 초기화된 배열 생성 pos 변수 활용 0의 개수만 세면서 k가 되면 1 삽입 1 2 3 4 5 6 7 8 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 0 0 1 0 0 0 0 0 1 2 3 4 5 6 7 8 0 0 1 0 0 1 0 0 pos 변수가 8까지 간다음 9가 되는 순간 1로 바꿈! 1 2 3 4 5 6 7 8 1 0 1 0 0 1 0 0 1 2 3 4 5 6 7 8 1 0 1 0 1 1 0 0 1 2 3 4 5 6 7 8 1 1 1 0 1 1 0 0 1 2 3 4 5 6 7 8 1 1 1 0 1 1 0 1 1 2 3 4 5 6 7 8 1 1 1 1 1 1 0 1 break; 탐색하면서 0을 가진 왕자 출력하면 끝 #include #include #inc..

[알고리즘][C++] 마구간 정하기(이분탐색 응용) ; 결정 알고리즘

문제 이해를 잘 못했음... 롸 뮤직 비디오 문제와 비슷한 문제 ! input 값 정렬 후 : 1 2 4 8 9 👌 1 ~ 9 사이에 답이 있음! 5 ? ( 말 세마리를 배치했을 때, 가장 가까이 있는 두 마리 말끼리의 거리) 1 2 4 8 9 🔼 🔼❌ 2-1=1 - > 불가 4-1=3 -> 불가 8-1=7 -> 가능 8-9=1 -> 불가 '5'라는 거리로 세마리 배치 불가 == 5보다 큰 숫자로도 불가 👌 1 ~ 4 2? 1 2 4 8 9 🔼 🔼 🔼⭕ 2-1=1 - > 불가 4-1=3 -> 가능 8-4 -> 가능 9-8 -> 불가 => '2' 거리로 세 마리 배치 가능 👌 3 ~ 4 3? . . . 반복 #include #include #include using namespace std; int n; ..

[알고리즘][C++] 뮤직비디오(이분탐색 응용) ; 결정 알고리즘

input: 9 3 1 2 3 4 5 6 7 8 9 그렇다면 답은 1~45 사이에 존재할 것이다! ( 가능! answer=23; (== 23부터 45까지는 전부 가능 -> 더 볼 필요X) 👌 1 ~ 22 11? 1+2+3+4 5+6 7 8 9 => 5개니까 불가능. (== 11이하는 전부 불가능) 👌 12 ~ 22 17 ? 1+2+3+4+5 6+7 8+9 => 가능! answer=17; .. . 반복 #include #include #include using namespace std; int a[1001], n; int Count(int s){ int i, cnt=1, sum=0; for(i=0; is){ //실제로 더한 것은 아님 cnt++; sum=a[i]; } else sum+=a[i]; } ret..

[알고리즘][C++] 연속된 자연수의 합

n을 2로 나눈 다음에 더하면 되지 않을까? 15 - (1 + 2) = 12 if (12 % 2 == 0 ) 12/2 의 몫을 1,2에 분배 1 2 +6 +6 7 8 => 7+8=15 ====== 15 -( 1 + 2 + 3) = 9 if (9%3 == 0) 9/3의 몫을 1 2 3에 분배 1 2 3 +3 +3 +3 4 5 6 => 4+5+6 = 15 #include #include #include using namespace std; int main(){ //freopen("input.txt", "rt", stdin); int a, b=1, cnt=0, tmp, i; scanf("%d", &a); tmp=a; a--; //a=14 while(a>0){ b++;//b=2인 상태 a=a-b; //a=12 ..