본문 바로가기

자료구조알고리즘/프로그래머스

(4)
약수의 개수 구하는 방법 숫자 N의 약수의 개수를 구하는 문제가 주어졌을 때, 1부터 N까지 모두 탐색을 하게 되면, N이 100,000같이 크기가 클 경우 시간이 많이 걸린다. 약수 개수를 구할 때, 시간을 줄이는 방법은 2가지가 있다. 1/ 소인수분해를 이용하는 방법 N을 소인수분해하여 각 소수의 지수를 구한 후, (각 지수+1) 값들을 곱하여 약수의 개수를 구한다. ex) N이 24일 경우 24 = 2³ * 3¹ → (3 + 1) * (1 + 1) = 4 * 2 = 8 즉, 24의 약수의 개수는 8이 된다. (1, 2, 3, 4, 6, 8, 12, 24) 2/ N의 제곱근으로 범위를 좁혀 탐색 만약 N이 24일 경우, 24의 제곱근(√24)은 4.xxxx이다. 따라서 1~24가 아닌, 1~4까지만 탐색해도 [ 1, 2, 3..
[프로그래머스] 다항식 더하기 [ 문제 ] 여기서 중요하게 봐야할 건, 결괏값을 '문자열'로 return하기! 여기서 잘 봐야할 건, '계수 1는 생략합니다'. 여기서 잠깐 용어 정리를 해보면 항 : 숫자 또는 문자의 곱으로 이루어진 식. 숫자와 문자를 곱한 것, 문자와 문자를 곱한 것, 숫자와 숫자를 곱한 것 ex: 3, 3a, a² 다항식 : 1개 이상의 항으로 이루어진 식. ex: 3x, 3x+1, 2y-2 단항식 : 다항식 중, 항이 1개만 있는 식. (즉, 단항식은 다항식에 포함됨) ex: 3x, -2, 1 차수 : 문자가 곱해진 횟수 ex 1) 4x² : x가 두번 곱해졌으므로 차수는 2. ex 2) 2y : y가 한 번 곱해졌으므로 차수는 1. ex 3) 1 : 문자가 곱해진 것이 없다. 그래서 차수는 0. 일차항 : 항..
[프로그래머스] 소수 만들기 [ 문제 ] 이 문제를 설명하자면, 배열인 nums에 들어있는 숫자 중, 서로 다른 3개를 골라 더하여 소수가 되는 경우의 개수를 return하는 것이다. - 입출력 예시로 설명을 하면, nums가 [1,2,3,4]이면 서로다른 3개를 골라 소수가 되는 경우는 [1,2,4] === 7, 하나의 경우밖에 없기때문에 1이 return 됩니다. [ 풀이 ] 1/ 먼저 소수인지를 판별하는 함수를 하나 만든다. 2/ 반복문을 이용하여 nums의 서로 다른 3개의 수를 더한다. 3/ 1번에서 만든 소수판별함수에 넣어 소수인지 확인한다. 1/ 먼저 소수인지를 판별하는 함수를 하나 만든다. function isPrime(num){ for(let i = 2; i
[프로그래머스] Lev1. 약수의 개수와 덧셈 [ 문제 ] 위 입출력 예시로 설명을 하자면, left는 13, right는 17이고 13부터 17까지의 모든 수 중, 약수의 개수가 짝수인 13, 14, 15, 17은 더하고 약수의 개수가 홀수인 16은 뺀 값을 return 하는 것입니다. [ 풀이 ] 제가 작성한 로직은 아래와 같습니다. 1/ 먼저 약수의 개수를 구하는 함수를 만듭니다. 2/ left부터 right까지 반복문을 이용해 1번에서 만든 약수의 개수를 구하는 함수로 약수의 개수가 짝수인지 홀수인지 구분합니다. 3/ 짝수이면 +, 홀수이면 -를 하여 최종 값을 return 합니다. 1/ 먼저 약수의 개수를 구하는 함수를 만듭니다. let divisor = function(num){ let count = 0; //먼저 count라는 변수에 0..