https://www.hackerrank.com/challenges/camelcase/problem CamelCase | HackerRank www.hackerrank.com 문자열 s를 입력을 받고 s안의 단어의 개수를 리턴하는 함수를 만드는 문제이다. 예를 들어, saveChangesInTheEditor를 입력받으면 단어는 save, Changes, In, The, Editor이므로 5를 리턴하면 된다. 먼저 처음의 단어는 대문자가 아니기 때문에 count를 1로 초기화 시켜주고, 그 후 s[i]가 대문자면 count를 증가시키도록 코드를 짰다.
https://www.hackerrank.com/challenges/countingsort1/problem Counting Sort 1 | HackerRank Count the number of times each value appears. www.hackerrank.com Counting Sort는 다음과 같다. arr = [1, 1, 3, 2, 1] 이라고 하였을때 i가 0부터 4까지 증가하는 동안 result의 인덱스 값은 arr[i]가 되고 그 인덱스의 요소를 1 증가시키면 된다. arr[i]의 값은 0~99이므로 result의 최대 배열의 크기는 100이다. 문제푸는 공간에서 int *를 리턴해야 하므로 int *을 리턴하도록 만들어 주었다 countinSort의 매개변수는 각각 배열의 크기, ..
https://www.hackerrank.com/challenges/tree-preorder-traversal/problem Tree: Preorder Traversal | HackerRank Print the preorder traversal of a binary tree. www.hackerrank.com 트리를 preorder 방식으로 순회하면서 출력하는 방식 preorder 방식은 자신을 먼저 출력한 후 왼쪽 자식을 출력하고 오른쪽 자식을 출력하는 방식이다. 재귀를 이용하면 쉽게 풀 수 있다. 코드에서 preOrder함수만 작성을 하면 되었으므로 preOrder부분만 작성하였다. root가 NULL인지 아닌지 확인을 하기 위해서 if 문으로 작성을 하였고 if문 안에서는 먼저 자신을 출력을 하고 ..
https://www.hackerrank.com/challenges/qheap1/problem QHEAP1 | HackerRank Solve the basic heap question with insertion and deletion. www.hackerrank.com EASY라고 되어있지만 난이도는 EASY가 아니었던 문제였다. 이 문제는 3가지 query로 이루어져 있다. 1. add 2. delete 3. print minimum 1번은 그냥 heap에 원소를 더하는 것과 같이 하면된다. 3번은 minimum을 출력하는 것으로 Min Heap으로 heap을 구성하였다. 2번이 가장 큰 문제였다. 보통 heap에서 delete를 한다고 하면 가장 큰 원소/가장 작은 원소를 지운다. 그러나 이 문제에서..
https://www.hackerrank.com/challenges/quicksort1/problem Quicksort 1 - Partition | HackerRank Perform the first step of Quicksort: partitioning an array. www.hackerrank.com Quicksort Partition 문제 Partition 할 때 두가지 방법이 있다. 첫번째는 배열을 새로 만들어서 그 곳에 partition을 하고 원래의 배열에 다시 복사하는 방법이다. 두번째는 inline 방식이다. 두 방식 모두 배열의 가장 첫번째 원소가 pivot이 되고 pivot과 다른 원소들을 비교하면서 pivot을 기준으로 작은 원소들은 오른쪽, 큰 원소들은 왼쪽에 넣어준다. 첫번째 ..
https://www.hackerrank.com/challenges/insertionsort2/problem Insertion Sort - Part 2 | HackerRank Code Insertion Sort itself. www.hackerrank.com part1에 이은 삽입정렬 문제이다. part1 : https://hse06028.tistory.com/33 이번에는 모든 원소들에 대하여 삽입 정렬을 하면 된다. 알고리즘은 part1과 같다. part1과 다른 점이 하나 있다면 모든 원소들에 대하여 정렬을 하면 된다는 것이다. for문이 두개가 돌아간다. 가장 바깥의 for문은 삽입을 할 원소를 정한다. i=1부터 시작을 했는데 그 이유는 그 원소의 앞 원소들과 대소 비교를 진행해야 한다. 만약 ..
https://www.hackerrank.com/challenges/insertionsort1/problem Insertion Sort - Part 1 | HackerRank Insert an element into a sorted array. www.hackerrank.com 삽입 정렬 문제 배열의 가장 끝에 있는 원소를 대소관계를 비교하여 정렬하는 문제 삽입 정렬의 알고리즘은 다음과 같다. 어떤 원소를 대소 비교 하면서 그 위치가 될때 까지 for문을 돌리고 그리고 그 위치에 해당하면 for문에서 나와서 그곳에 집어 넣어 준다. 원래는 배열의 모든 원소들을 해줘야 하는데 이 문제는 가장 끝 원소만 삽입 정렬을 하면 되었다. 따라서 for문을 두번 돌리지 않고 한번만 돌려서 끝에서 두번째 원소부터 해당..
https://www.hackerrank.com/challenges/detect-whether-a-linked-list-contains-a-cycle/problem Cycle Detection | HackerRank Given a pointer to the head of a linked list, determine whether the linked list loops back onto itself www.hackerrank.com 연결리스트 내에서 사이클이 있는지 없는지 확인하는 문제이다. head에서 시작하는 slow와 fast를 두 개 만든다. slow는 한번 움직이고 fast는 두번 움직인다. (slow n번 움직이면 fast는 2n번 움직임) 이때 slow와 fast가 만나게 된다면 cycle이 ..
https://www.hackerrank.com/challenges/tree-postorder-traversal/problem Tree: Postorder Traversal | HackerRank Print the post order traversal of a binary tree. www.hackerrank.com postorder 방식은 트리에서 노드를 LRV로 찾는다. 즉, 노드의 왼쪽, 오른쪽, 노드 자신 순으로 방문한다고 생각하면 된다. 이러한 postorder 방식은 재귀를 이용하면 쉽게 풀 수 있다. (postOrder 함수만 완성시키면 되는 문제여서 postOrder 함수 코드만 올린다.) if문 안을 보면 재귀를 이용하여 함수의 코드를 완성한 것을 볼수있다. postOrder 방식은 LR..
https://www.hackerrank.com/challenges/balanced-brackets/problem Balanced Brackets | HackerRank Given a string containing three types of brackets, determine if it is balanced. www.hackerrank.com 스택을 이용하여 괄호 검사 하는문제 한군데를 캐치하지 못해서 2시간을 낭비했던 문제......(덕분에 이제 못잊을 것 같다) 스택을 배열로 하여 문제를 풀었다. 여는 괄호와 닫는 괄호가 제대로 매치될때 YES를 출력하면 된다. 제대로 매치되지 않으면 NO를 출력하면 된다. 이는 다음과 같다 1. 여는 괄호가 없을때 2. 여는괄호와 닫는 괄호가 매치되지 않을때 3...