코테

    Toy 문제 18

    문제 길이가 m, n이고 오름차순으로 정렬되어 있는 자연수 배열들을 입력받아 전체 요소 중 k번째 요소를 리턴해야 합니다. Advanced 단순히 처음부터 끝까지 찾아보는 방법(O(K)) 대신 다른 방법(O(logK))을 탐구해 보세요. let arr1 = [1, 4, 8, 10]; let arr2 = [2, 3, 5, 9]; let result = getItemFromTwoSortedArrays(arr1, arr2, 6); console.log(result); // --> 8 수도코드(해석) 두 배열을 합쳐서(concat) sort하고 해당 k위치에 해당되는 값을 뽑으면 되지않을까 라는 생각에 좀 혼란에 빠졌는데 sort의 시간복잡도 O(log N) 이고 K위치를 바로 출력하는건 O(1) 이니까 시간복..

    Toy 문제 17

    문제 문자열을 입력받아 문자열 내의 모든 괄호의 짝이 맞는지 여부를 리턴해야 합니다. 다음 단계에 맞춰 함수를 작성해 보세요 괄호의 종류를 단 한가지로 한정합니다. 괄호의 종류를 늘려 모든 종류의 괄호에도 작동하도록 합니다. 괄호를 제외한 문자열이 포함된 경우에도 작동하도록 합니다. 주의사항 괄호의 종류는 (, )만 고려합니다. 괄호는 먼저 열리고((), 열린만큼만 닫혀야()) 합니다. 빈 문자열을 입력받은 경우, true를 리턴해야 합니다. Advanced 모든 종류의 괄호((, ), {, }, [, ])가 포함된 문자열을 입력빋아 모든 괄호의 짝이 맞는지 여부를 리턴해 보세요. 수도코드(해석) 종류가 6개만 있어서 각 종류에 대한 갯수를 세어서 같은지에 대해 확인 할 수 있지만, 어드벤스를 포함한 원..

    Toy 문제 16

    문제 정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다. 주의사항 퀵 정렬을 구현해야 합니다. arr.sort 사용은 금지됩니다. (갑자기 든 생각이지만 왜 있는 함수를 쓰지 말라는건 왜 일까요.? 난이도를 조금만 올릴려고 그러는걸까요?) 입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다. Advanced quickSort 함수의 두 번째 인자로 callback 함수를 받아서, 그 함수의 리턴값을 기준으로 요소들을 정렬해 보세요. 입출력 예시 let output = quickSort([3, 1, 21]); console.log(output); // --> [1, 3, 21] 수도코드(해석) 퀵정렬에 대해서 더보기 하나의 리스트를 피벗(pivot)을 기준으로 두 개의 비균등한 ..

    Toy 문제 15

    문제 다음의 조건을 만족하면서 현재의 비밀번호('curPwd')를 새 비밀번호(newPwd)로 변경하는 데 필요한 최소 동작의 수를 리턴해야 합니다. 한 번에 한 개의 숫자만 변경가능하다. 4자리의 소수(prime)인 비밀번호로만 변경가능하다. 정리하면, 비밀번호가 계속 소수를 유지하도록 숫자 한 개씩을 바꿔갈 때 현재 비밀번호에서 새 비밀번호로 바꾸는 데 최소 몇 개의 숫자를 변경해야 하는지를 리턴해야 합니다. 주의사항 4자리인 소수는 1,000 이상의 소수를 말합니다.(0011, 0997 등은 제외) 입출력 예시 let output = primePassword(1033, 1033); console.log(output); // --> 0 output = primePassword(3733, 8779); ..

    Toy 문제 14

    문제 부분적으로 오름차순 정렬*된 정수의 배열(rotated)과 정수(target)를 입력받아 target의 인덱스를 리턴해야 합니다. 주의사항 rotated에 중복된 요소는 없습니다. target이 없는 경우, -1을 리턴해야 합니다. Advanced 단순히 처음부터 끝까지 찾아보는 방법(O(N)) 대신 다른 방법(O(logN))을 탐구해 보세요. 수도코드(해석) 삽입정렬 : 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 배열이 길어질수록 효율이 떨어집니다. 이 문제가 가장 원하는 점은 sort 메서드를 사용하지 않고 해당 인자가 몇번째에 위치하는지 구해야 합니다. 절반이 각각 오름차순으로 정렬되어 있기 때..

    [알고리즘] DFS, BFS 기본 구현

    설명 DFS, BFS 처음 볼때에는 정말로 햇갈렸습니다. 하지만 DFS와 BFS의 원리를 알고 DFS의 D의 영어가 Depth(깊이) BFS의 B의 영어가 Breadth(폭, 너비) 라는 것을 알고 있으면 쉽게 햇갈리지 않을거라고 생각합니다. 순열, 중복순열, 멱집합에 대해 앞 게시글에 작성을 하였는데 전부 DFS로 작성을 하였습니다. 물론 BFS로 풀면 풀 수 있지만 효율의 문제여서 상황에따라 BFS, DFS를 잘 쓰는게 중요합니다. 그래서 제가 생각하는 BFS를 쓰는 경우에는 찾고자 하는 그래프의 깊이가 얕거나, 최단 경로를 찾아야할 때에 가장 유용한 방법 이라고 생각합니다. BFS는 층에 개념으로 보는게 더 효율적입니다. 모든 층을 다 둘러 보았을때에 그 다음 층을 보러 가는 것입니다. 1. 사장 ..

    [알고리즘] 멱집합에 대해서 (DFS)

    설명 앞선 게시물에서는 순열, 중복순열에서 다루었는데 멱집합과 유사하지만 멱집합은 다른 조건이 붙습니다. 순열, 중복순열의 출력값의 길이가 전부 동일하지만 멱집합은 그렇지 않다는 점이며, 선택의 유무가 자유롭습니다. 멱집합 S={a, b}라 하면, P(S)={ ∅, {a}, {b}, S } 이다. 원소의 개수가 n개인 집합의 부분집합의 개수는 2^n(2의 n승)개이므로, 멱집합의 원소의 개수 또한 2^n(2의 n승)개가 된다. 멱집합은 위상 공간 등의 개념에 사용된다. (n승 맥북으로 어떻게 쓰나요..ㅠ 알려주실분..) 어찌되었든 순열, 중복순열은 n의 r 승의 경우의 수가 나오는 반면에, 멱집합은 2의 n승의 경우의 수가 나온다. 여기서만 보아도 멱집합의 특징을 볼 수있다. 좀 더 작은 경우의 수가 나..

    [알고리즘] 중복순열, 순열에 대해서 (DFS)

    순열 : 서로 다른 n 개 중 r 개를 골라 순서를 고려해 나열한 경우의 수. 순열의 개념은 굉장히 쉽습니다. n개에서 -1씩 빼서 r이 될 때까지 그 숫자를 나열해 곱해주면 그 경우의 수가 나온다. 결국 펙토리얼과 같은개념 입니다. nPn=n(n-1)(n-2)···2·1=n! 중복순열로 이어진다면 n의 r 제곱으로 이어 져서 nPr 로 표현이 가능할 것입니다. 수학적인 개념도 중요하지만 개념을 하는것과 코딩으로 풀어내는것은 좀 더 높은 수준을 요구 하는 것으로 저에겐 보여집니다. 배우는 것 보다 남에게 누구에게 가르친다는것은 더 많은 것을 알아야 하는 것 처럼 코딩 한다는 것은 어떠한 상황을 컴퓨터에게 가르쳐줘야 하는 것과 같기 때문에 코딩을 하는 것은 더 어려운 것 같습니다. 중복순열이 중복이 가능하..

    Toy 문제 13

    문제 정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다. 입력 인자 1 : arr number 타입을 요소로 갖는 배열 arr[i]는 정수 arr.length는 1,000 이하 출력 number 타입을 요소로 갖는 배열을 리턴해야 합니다. 배열의 요소는 오름차순으로 정렬되어야 합니다. arr[i] [1, 3, 21] 수도코드(해석) 삽입 정렬(insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. 배열이 길어질수록 효율이 떨어진다. 최악 시간복잡도: О(n2) 비교 및 교환 최선 시간복잡도: O(n) 비교, O(1) 교환 쉽게 말해서 sort를 사용하지 않기 때문에..

    Toy 문제 12

    문제 임의의 tree를 구성하는 노드 중 하나의 Node 객체를 입력받아, 해당 노드를 시작으로 너비 우선 탐색(BFS, Breadth First Search)을 합니다. 이 때, 탐색되는 순서대로 노드의 값이 저장된 배열을 리턴해야 합니다. 입력 인자 1 : node 'value', 'children' 속성을 갖는 객체 (Node) 'node.value'는 number 타입 'node.children'은 Node를 요소로 갖는 배열 출력 배열을 리턴해야 합니다. 주의사항 생성자 함수(Node)와 메소드(addChild)는 변경하지 않아야 합니다. 입출력 예시 let root = new Node(1); let rootChild1 = root.addChild(new Node(2)); let rootChil..