반응형

<알고리즘 문제풀이&연습> 103

[C 자료구조] Stack - Simple Text Editor

0) 제목Hackerrank 의 Stacks 부분의 Simple Test Editor 문제입니다. (simple하지 않았습니다. 생각을 많이했어야 하는 문제였습니다 저한테는..)C언어를 이용하여 풀었습니다.1) 문제설명Quary의 갯수 q를 받고, q만큼의 쿼리(line)을 받습니다.1입력시 append.2입력시 delete.3입력시 print4입력시 undo입니다.append는 문자열 str 을 받고, 기존에 문자열에 새 문자열을 붙입니다.delete는 int 타입의 변수 k를 받는데, 문자열의 맨 끝에서부터 k 만큼 문자를 삭제합니다.print는 int 타입의 변수 k를 받는데, 현재 문자열에서 k번째 인자를 출력합니다.undo는 인자로 받는것은 없고, 바로 전에 했던 append나 delete를 실..

[C 자료구조] Array - Left Rotation

0) 제목Hackerrank 의 Arrays 부분의 Left Rotation 문제입니다.왼쪽으로 배열을 옮긴다! 이런 문제입니다.C언어를 이용하여 풀었습니다. 1) 문제설명배열이 주어지면 그 배열을 왼쪽으로 rotation 시키는 문제입니다. 예를들어 배열 {1, 2, 3, 4, 5, 6} 이 주어지고, rotation이 3이 나오게 되면출력을 {4, 5, 6, 1, 2, 3} 순으로 출력하면 됩니다.처음에 배열의 길이와, rotation의 숫자를 입력 받고배열의 길이만큼 데이터를 입력 받는 형태입니다.2) 풀이과정자료구조 항목의 배열 문제 이지만, 재미있는 알고리즘 문제라고 생각합니다.처음에는 무식하게 "배열을 rotation 숫자만큼 이동하면 되겠다"라고 생각했는데, 잘 읽어보니까 "출력"만 rota..

[C 자료구조] Tree - Is This a Binary Search Tree?

0) 제목Hackerrank 의 Tree 부분의 Is This a Binary Search Tree? 문제입니다.C언어를 이용하여 풀었습니다.1) 문제설명이진트리(Binary Tree)의 root 노드의 포인터가 파라미터로 주어집니다.주어진 트리가 이진트리(Binary Tree) 인지 이진탐색트리(Binary Search Tree) 인지 검사하는 문제입니다.만약 이진탐색트리라면 true를 아니라면 false를 리턴하는 문제입니다.2) 풀이과정처음에는 단순하게 이진트리 이므로, 재귀함수를 이용하여 각 노드마다 이진탐색 트리의 조건을 만족하는지 체크하면서 함수를 호출하는 방식을 시도했었습니다.그러다가 이진 탐색 트리의 특성을 곰곰히 생각하면서, 다른식으로 접근해보려고 시도했습니다.이진 탐색트리의 특성은 "왼..

[C++ 상속/virtual] Virtual Functions (가상함수)

0) 제목Hackerrank 의 C++>Introduction 부분의 Virtual Functions 문제입니다.C++ 이용하여 풀었습니다.기초 클래스 = 상위 클래스 = 슈퍼 클래스 = 부모 클래스유도 클래스 = 하위 클래스 = 서브 클래스 = 자식 클래스. 1) 문제설명기초클래스 즉 부모클래스인 Person 클래스를 만들고, Person 클래스를 상속하는 유도 클래스 즉, 자식 클래스를 상속을 통해서 Professor 클래스와 Student를 만들어서 주어진 input을 받아서output 형태 대로 출력하는 문제입니다.main 함수 내에 input과 output의 형태는 주어졌습니다. hackerrank에서 제공되어있는 form 이 있으므로, 여기에 올리지는 않겠습니다.제가 작성할 수 있는 코드 부분..

[C++ 동적할당] Variable Sized Arrays (배열)

0) 제목Hackerrank 의 C++>Introduction 부분의 Variable Sized Arrays 문제입니다.C++ 를 이용하여 풀었습니다.C를 이용한 배열 포인터, 포인터배열에 대한 설명은 여기 있습니다.1) 문제설명동적할당을 이용하여 배열에 변수를 넣고 그 변수를 출력하는 문제입니다.초기에 n, q를 받는다.n 개의 배열을 만들 것인데 각 배열마다 배열의 크기가 다르다.그 배열의 크기를 맨 앞에 받고 그것의 크기만큼 인자를 받습니다.배열을 다 채우고출력할 쿼리를 받는다 순서대로 j, k 를 받는데j 번째 배열에서 k 번쨰 index를 출력한다.2) 풀이과정각 배열 마다 배열의 크기가 다르게 주어지고, 처음에 배열이 몇개 주어질지 모르기 때문에.동적할당을 이용해서 2차원 배열을 만드는 방식을..

[C 자료구조] Stack - Balanced Brackets

0) 제목Hackerrank 의 Linked Lists 부분의 Balanced Brackets 문제입니다.스택을 이요한 괄호 맞추기? 정도 되겠습니다.C언어를 이용하여 풀었습니다.1) 문제설명N개의 갯수만큼의 쿼리(줄) 을 입력받는다.각 줄은 "[{()}]" 등이 input으로 들어온다. 여는괄호와 닫는괄호가 딱 맞아 떨어지면 YES를 출력하고 그렇지 않으면 NO를 출력하는 문제이다.2) 풀이과정스택(stack)을 이용해서 풀었습니다.2가지 경우가 있다고 생각했습니다.첫 번째 경우는 여는 괄호가 들어오고 닫는 괄호와 맞지 않는 경우.두 번째 경우는 닫는 괄호만 들어오는 경우.두가지 상황을 예외라고 생각하고 문제를 풀었습니다.3) 함수설명StackInit : 스택 초기화.isEmpty : 스택이 비어있는지..

[C 자료구조] Linked Lists -Reverse a doubly linked list

0) 제목Hackerrank 의 Linked Lists 부분의 Reverse a doubly linked list 문제입니다.C언어를 이용하여 풀었습니다.http://blockdmask.tistory.com/14 과 80퍼센트 동일.1) 문제설명더블 링크드 리스트를 역순으로 만드는 문제입니다. 이전에 푼 싱글 링크드 리스트 역순과 거의 비슷합니다.input) NULL NULLoutput) NULL NULL2) 풀이과정오리지널노드의 head->next를 가리킬 노드 포인터(curNode) 하나,역순 노드의 헤드가 될 노트 포인터(tail) 하나를 만들어서하나씩 이동하면서 역순으로 셋팅하도록 구현했습니다. 3) 코드1234567891011121314151617181920212223242526272829303..

[C 자료구조] Heap - QHEAP1

0) 제목Hackerrank 의 Heap 부분의 QHEAP1 문제입니다.C언어를 이용하여 풀었습니다.1) 문제 설명 기본적인 배열기반 최소힙 구조입니다.minheap을 구현하는 것인데1->insert2->delete3->peek입니다.insert 할때에는 변수를 받아서 삽입,delete 할때에는 맨위의 최소값을 삭제하는게 아니라, 입력한 변수를 찾아서 삭제,peek일때는 minheap의 최소값(root)를 출력하는 문제입니다.2) 풀이 과정 동적할당을 이용하여 처음 입력 받은 N 에서 N+1 만큼의 용량을 할당했습니다.N+1로 동적할당 한 이유는 arr[0]이 아닌 arr[1]부터를 힙의 루트로 사용하는게 더 편리하기 때문입니다.HeapInsert 함수는 heap 포인터와 data를 파라이터로 받아서, ..

[C 자료구조] Tree - Level Order Traversal

0) 제목Hackerrank 의 Linked Lists 부분의 Reverse a linked list 문제입니다.C언어를 이용하여 풀었습니다.1) 문제 설명 Tree의 Root Node의 Pointer가 Level Order 함수의 파라미터로 주어지고, 주어진 트리의 Level별로 data를 순서대로 출력하는 문제입니다.2) 풀이 과정 BFS(넓이 우선 탐색)라고 생각하여서 Queue를 이용해서 풀었습니다. 또한, 문제에서 주어진 Tree의 Node의 갯수가 최대 500 이어서, 동적할당을 이용한 Linked lists로 Queue를 구현하는 방식으로 풀었습니다. 3) 코드12345678910111213141516171819202122232425262728293031323334353637383940414..

[C 자료구조] Linked Lists - Reverse a linked list

0) 제목Hackerrank 의 Linked Lists 부분의 Reverse a linked list 문제입니다.C언어를 이용하여 풀었습니다.1) 문제설명Reverse 함수의 파라미터로 들어오는 Node 구조체의 포인터 (head pointer of Linked lists)를 받아서 역순으로 연결하여 return 하는 문제입니다.input) 2 -> 4 -> 7 -> NULLoutput) 7-> 4 -> 2-> NULL2) 풀이과정오리지널노드의 head->next를 가리킬 노드 포인터(curNode) 하나,역순 노드의 헤드가 될 노트 포인터(tail) 하나를 만들어 하나씩 이동하면서 역순으로 셋팅하도록 구현했습니다.3) 코드 12345678910111213141516171819202122/* typede..

반응형