본문 바로가기

알고리즘

재귀함수를 이용한 부분집합 구하기 1. 프로그래밍 인사이트에서 발간한 알고리즘 트레이닝을 시작했습니다. 2. 첫장에 재귀를 사용해서 부분집합을 구하는 알고리즘이 나오는데 재귀 함수 따라가다가 멘붕이 와서 정리해둡니다. 으악! Q. 원소가 n개인 집합의 모든 부분집합을 생성해보자. ex) {1, 2, 3}의 부분집합은 공집합{}, {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3} 입니다. 이 부분집합을 재귀 알고리즘을 이용해 구한 예제 코드가 있습니다. (C++) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include #include.. 더보기
숫자 대각선 나열하기 1 2 4 7 11 3 5 8 12 16 6 9 13 17 20 10 14 18 21 23 15 19 22 24 25 이런식으로 뽑아야 하는 문제다.처음에는 이게 무슨 패턴이 있는지 알기 힘들었다.숫자도 더해보고, 위아래 값 비교도 해보고 하는데 일관성이 없어서 이거 파악하는 데만도 한참 걸린듯. 그러다 발견한 패턴!아래 그림처럼 숫자가 대각선으로 증가하는 걸 알 수 있었다. 좌표로 보면, 1 : (0,0) 2: (0.1)3: (1,0) 4: (0.2)5: (1,1)6: (2,0) 7: (0,3) 8: (1,2) 9: (2,1) 10: (3,0) 이렇게 되는데, 자세히 보면... x좌표는0010123012341234234344 이런식으로 바뀌고y좌표는0102103210432104321432434 대강 이.. 더보기
약수의 합 javascript function sumDivisor(num) {var answer = 0; var divisor = 1; while(num >= divisor){ var addNum = num % divisor == 0 ? divisor : 0; answer += addNum; divisor++; }; return answer;} // 아래는 테스트로 출력해 보기 위한 코드입니다.console.log(sumDivisor(12)); 이번거는 비교적 간단했음.. 더보기
제일 작은 수 제거하기 python def rm_small(mylist): # 함수를 완성하세요 smallest = mylist[0] index = 0; selected = 0; for number in mylist : if number < smallest : smallest = number selected = index index = index + 1 print(smallest) del mylist[selected] return mylist # 아래는 테스트로 출력해 보기 위한 코드입니다.my_list = [4, 3, 2, 1]print("결과 {} ".format(rm_small(my_list))) 더보기
최대공약수 최소공배수 javascript 프로그래머스라는 알고리즘 문제를 풀 수 있는 재미있는 사이트가 있다.알고리즘 연습하는데 도움이 많이 될 것 같다.재미있다. function gcdlcm(a, b) { var answer = []; var bigger = a >= b ? a : b; var smaller = a = 0; sIndex--){ if(biggerDivisorArr[bIndex] == smallerDivisorArr[sIndex]){ answer[0] = biggerDivisorArr[bIndex]; bIndex = 0; break; } } } // 최소공배수 var multiple; var k = 1; while(true){ multiple = bigger * k++; if(multiple%smaller == 0){ answer.. 더보기