본문 바로가기

분류 전체보기

Codility Lesson9 - MaxProfit 🔍 문제 주어진 배열 A의 원소가 한 주식의 가격이라고 생각하고, 배열 A의 index는 날짜라고 생각한다. 따라서 주식의 가격(배열 값)은 날짜(index)에 따라 가격이 변화하는데, 이 중 주식을 사고 팔았을 때 가장 큰 이익을 계산해서 return 하면 되는 문제이다. 만약 이익을 낼 수 있는 경우가 전혀 없고 손해만 난다면 return 0을 해주면 된다. MaxProfit coding task - Learn to Code - Codility Given a log of stock prices compute the maximum possible earning. app.codility.com ✏️ 풀이 - JS 이 문제를 brutal force로 푸는 방법 밖에 생각나지 않아, 검색해보다가 Kadane.. 더보기
Codility Lesson8 - Dominator 🔍 문제 주어진 배열 A에서 과반수 이상으로 같은 값을 가진 인덱스들을 찾아서 아무 인덱스나 return 해주면 되는 문제이다. Dominator coding task - Learn to Code - Codility Find an index of an array such that its value occurs at more than half of indices in the array. app.codility.com ✏️ 풀이 - JS 처음에 문제를 잘못 읽고 과반수 이상으로 같은 값을 가진 인덱스들을 모두 배열로 반환하는 건 줄 알았다가 오류떠서 다시 읽어보니 index중 아무 값이나 반환하면 되는 문제였다. Map을 이용해서 풀었으며, 시간 복잡도는 O(N*log(N)) or O(N)가 나왔다. fun.. 더보기
Codility Lesson7 - Nesting 🔍 문제 이전에 풀었던 Lesson7의 Brackets와 매우 비슷한 문제인데 더 쉬운 문제이다. (, ) 로 이루어진 문자열 S의 괄호 짝이 맞는지 확인해서 맞으면 return 1 틀리면 return 0을 하면 된다. Nesting coding task - Learn to Code - Codility Determine whether a given string of parentheses (single type) is properly nested. app.codility.com ✏️ 풀이 - JS 이 문제도 역시 stack을 이용해서 풀었다. 여는 괄호가 나오면 open이라는 배열에 넣어주고, 닫는 괄호가 나오면 open.pop()을 해서 여는 괄호가 있는지 확인해주면 된다. 처음에는 주어진 문자열 S를 .. 더보기
Codility Lesson7 - Fish 🔍 문제 Fish coding task - Learn to Code - Codility N voracious fish are moving along a river. Calculate how many fish are alive. app.codility.com 강 한 줄기가 있다고 했을 때, 물고기들의 사이즈가 담긴 A 배열과 물고기들이 향하는 방향을 알려주는 배열 B가 주어진다. 만약, 위로 향하는 물고기와 아래로 향하는 물고기가 만나게 되면, 사이즈가 더 작은 물고기는 더 큰 물고기에게 잡아먹히게 된다. 이렇게 해서 최종 살아남게 되는 물고기 수를 구하면 된다. ✏️ 풀이 - JS 물고기가 만나게 되는 경우는 오직 아래로 향하는 물고기 + 위로 향하는 물고기의 조합 밖에 없다. 따라서 B배열의 값이 (1.. 더보기
Codility Lesson7 - Brackets 🔍 문제 Brackets coding task - Learn to Code - Codility Determine whether a given string of parentheses (multiple types) is properly nested. app.codility.com ✏️ 풀이 - JS 문자열안에 괄호의 짝이 알맞게 들어가있는지 체크하는 문제이다. 기본적으로 stack의 후입선출을 이용해서 풀었다. 여는 괄호는 따로 arr이라는 배열에 넣어주고, 닫는 괄호가 나왔을 때는 앞에서 여는 괄호가 담긴 arr.pop()을 해서 가장 마지막의 여는 괄호를 꺼내서 맞는 짝인지 확인해주었다. 참고로, 처음에는 여는 괄호의 짝이 없는(닫는 괄호가 부족한 상황) 예외를 생각하지 못해서 조금 해멨다. if(arr.. 더보기
Codility Lesson6 - NumberOfDiscIntersections 🔍 문제 NumberOfDiscIntersections coding task - Learn to Code - Codility Compute the number of intersections in a sequence of discs. app.codility.com ✏️ 풀이 - JS 처음 주어진 배열 A로 원을 그린다. 배열 인덱스가 중심점, 반지름은 배열의 값이다. 원을 그렸을 때 겹치는 원의 개수를 구하면 된다. 이번에도 역시나 나는 이중 for문에서 헤어나오지 못했다... 아래와 같이 풀어서 정확도는 100%지만 역시나 performance에서는 62%가 나와서 총 81%가 나왔다. 시간복잡도는 N(N**2)😓 일단 논리는 처음 배열 A에서 index를 기준으로 원 그리기의 startPoint와 en.. 더보기
Codility Lesson6 - Triangle 🔍 문제 Triangle coding task - Learn to Code - Codility Determine whether a triangle can be built from a given set of edges. app.codility.com ✏️ 풀이 - JS 배열의 원소중 삼각형을 만들 수 있는 조합이 있는지 묻는 문제이다. 삼각형을 만들기 위해서는 세 변이 있을 때, 가장 큰 변을 제외한 나머지 두 변의 합이 가장 큰 변보다 커야한다. 배열 A를 오름차순으로 정렬한 후 for문을 돌면서 차례대로 3가지 조합을 만들어주면서 1번째, 2번째 숫자를 합한 값이 3번째 숫자보다 큰지 확인해 주면 된다. 시간 복잡도는 O(N*log(N)) 이고 정확도, 효율성 모두 100%로 통과하였다. functio.. 더보기
Codility Lesson6 - Distinct 🔍 문제 Distinct coding task - Learn to Code - Codility Compute number of distinct values in an array. app.codility.com ✏️ 풀이 - JS 배열 A에서 순수 값(중복X)이 총 몇 개인지 구하는 문제이다. 먼저 배열을 오름차순으로 정렬한다. 그리고나서 current 변수에 현재 보고있는 값을 넣어주고, current와 값이 다른 값이 나왔다면 cnt(최종 return할 값)에 +1을 해주고, current값도 달라진 값으로 변경해준다. 그렇게 배열을 순회해가면서 값의 갯수를 찾아준다. 시간 복잡도는 O(N*log(N)) of O(N), 정확도와 효율성 모두 100%가 나왔다. function solution(A) { .. 더보기
Codility Lesson6 - MaxProductOfThree 🔍 문제 MaxProductOfThree coding task - Learn to Code - Codility Maximize A[P] * A[Q] * A[R] for any triplet (P, Q, R). app.codility.com ✏️ 풀이 - JS 배열의 3 원소를 곱해서 가장 큰 수가 나오는 값을 return 해주면 된다. 먼저, 배열 A를 오름 차순으로 정렬해준다. 만약 배열의 모든 수가 음수나 양수라면, 아래 코드에서는 n이 최대 값이 된다. 이 때, 함정이 음수와 양수가 함께 있을 경우이다. 음수는 절대값이 클 수록 왼쪽으로 정렬되기 때문에 절대값이 큰 A[0] * A[1]을 해서 두 음수를 곱해 양수가 되는 경우를 생각해주고, 마지막으로 가장 큰 수 A[A.length]를 곱해준다. .. 더보기
Codility Lesson5 - CountDiv 🔍 문제 CountDiv coding task - Learn to Code - Codility Compute number of integers divisible by k in range [a..b]. app.codility.com ✏️ 풀이 - JS 일단 문제 자체는 쉽다. 주어진 범위내에서 어떤 정수 값으로 나누어 떨어지는 수의 개수를 구하면 되는 문제다. 단순하게 생각하면 아래와 같이 풀면되지만, 문제에서 가장 중요한건 효율적으로 풀어야 하기 때문에 performance면에서 0%이다. function solution(A, B, K) { let cnt = 0; for(let i = A; i 더보기