본문 바로가기

알고리즘/HackerRank

(6)
[HackerRank] Components in a graph(Java, union-find) ## 접근방법 우선 이 문제는 처음 접근 방법으로는 런타임 에러를 받았다. 런타임 에러는 인덱스 초과, 스택 오버 플로우 등의 이유로 발생한다. 스택 오버 플로우에 접근했었던 접근 방법에 대해서 알아보자. 스택 오버 플로우가 발생했던 접근 방법은 노드들을 전체 탐색하는 것이다. 물론 방문했던 노드들을 다시는 방문안하도록 체크하는 배열을 사용해도 스택 오버 플로우가 발생한다. 각 노드들에서 나머지 노드들을 모두 방문할 수 있으므로 시간복잡도는 N * N이 된다. 우선, 스택 오버 플로우가 발생하지 않으려면 함수의 재귀적 호출을 줄이거나 없애야 한다. 함수의 재귀적 호출을 없애는 것으로 문제를 풀어보자. 그래프에서 Union-Find라는 개념은 그래프에서 흔히 사용된다. 두 그래프를 합치고, 각 그래프의 부..
[HackerRank] Absolute Permutation(Java) www.hackerrank.com/challenges/absolute-permutation/problem?isFullScreen=true Absolute Permutation | HackerRank Find lexicographically smallest absolute permutation. www.hackerrank.com ## 접근방법 n과 k를 직접 정의하며 규칙을 발견해야 한다. k에 의해서 반복되는 패턴이 존재한다. 1은 1 + k, 2는 2 + k, 3은 3 + k ... 진행이 될 수 있다. 모든 수들은 일대일 매칭이 되어야 하므로, 1 + k는 1, 2 + k는 2, 3 + k는 3...이 되어야 한다. k에 의해서 반복되는 패턴의 수가 결정된다. n의 길이가 2 * k의 배수여야 위의 ..
[HackerRank] Self Balancing Tree(Java, 로테이션, 이진트리) www.hackerrank.com/challenges/self-balancing-tree/problem?isFullScreen=true Self Balancing Tree | HackerRank Insert values in a self balancing binary search tree. www.hackerrank.com ## 접근방법 이 문제는 기본적으로 AVL 트리에 대한 개념이 있어야 한다. AVL 트리가 나오게 된 개념부터 생각해보자. 트리는 자료를 저장하기 위한 자료구조이다. 트리는 높이만큼의 탐색 시간을 가지므로, 일반적으로 log의 시간복잡도의 탐색을 할 수 있다. 하지만 치우져친 트리가 완성된다면, 트리의 장점을 이용할 수 없게 된다. 그래서, 나오게된 개념이 AVL 트리라는 것이다. A..
[HackerRank] Is This a Binary Search Tree? (Java, 이진탐색트리 판단, 확인) www.hackerrank.com/challenges/is-binary-search-tree/problem Is This a Binary Search Tree? | HackerRank Given the root of a binary tree, you have to tell if it's a binary search tree. www.hackerrank.com ## 접근방법 정말 좋은 문제다, 지금까지 이진탐색트리의 시간복잡도, 삽입, 탐색에 관해서만 생각했었다. 만들어진 이진트리를 판단하는 문제는 접해보지 않았다. 어떻게 이진트리임을 판단할 것인가? 처음에는 단순 자식으로만 값의 비교를 통해서 확인하려고 했다. 이것은 아주 위험하고 어리석은 생각이다. 이진트리는 왼쪽 이진트리의 노드들은 모두 현재 값보다..
[HackerRank] Organizing Containers of Balls(Java) www.hackerrank.com/challenges/organizing-containers-of-balls/problem Organizing Containers of Balls | HackerRank Determine if David can perform some sequence of swap operations such that each container holds one distinct type of ball. www.hackerrank.com ## 접근방법 이 문제는, 예제를 그리다가 아이디어가 쉽게 떠올랐다. 아이디어가 말로 표현하기 편해서 글을 쓰게 되었다. 이 문제의 목적은, 컨테이너에 한 가지의 공으로 가득채워야 한다. 어떻게 풀것인가? 과정을 생각하려 하지말고, 결과에 초점을 맞춰보자. ..
[HackerRank] Queen's Attack II(Java) ## 접근방법 쉬워보였지만, 의외로 시간이 걸렸던 문제이다. 두 가지 접근 방법을 소개하려고 한다. 첫번째로는 직관적으로 문제를 풀어보자. 퀸에서 출발하여, 벽을 만나는 순간의 여러 방향의 끝지점의 좌표를 미리 구해주자. 이제는 방해물 좌표를 가지고, 여러 방향의 끝지점 좌표들을 막을 수 있는지 확인해야 한다. 즉, 퀸, 장애물, 끝지점 좌표가 한 직선위에 있어야 한다. 수직선은 열이 모두 같아야 하고, 수평선은 행이 모두 같아야 한다. 대각선 일 때는, 기울기가 동일해야 한다. 위의 조건만으로는 부족하므로, 점의 대소 관계를 통해서 가운데 있음을 확인하면 된다. 첫번째 접근 방식은 구현이 지저분하다는 생각이 들었다. 구글링을 통해서 두번째 접근 방법을 알았다. 두번째 접근은 좀 더 직관적이다. 수직선,..