일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 카카오 공채
- dfs
- 2020 카카오 공채
- CS 스터디
- 프로그래머스
- c++
- 삼성 SW 기출문제
- 2019 KAKAO BLIND RECRUITMENT
- gcp
- 자바
- 삼성 SW 역량테스트
- 2018 KAKAO BLIND RECRUITMENT 1차
- gradle
- 2018 KAKAO BLIND RECRUITMENT
- 2019 카카오 공채
- set
- bfs
- 비트마스크
- 카카오
- 2018 카카오
- 젠킨스
- Baekjoon
- 백준
- 2019 카카오 개발자 겨울 인턴십 코딩테스트
- 부스트코스
- Java
- map
- 2020 KAKAO BLIND RECRUITMENT
- 알고리즘
- 2018 카카오 공채
Archives
- Today
- Total
아무코딩
[2020 KAKAO BLIND RECRUITMENT] 길찾기 게임 본문
문제는 2번에 걸쳐 풀었다. c++로 푸는데 malloc을 사용하는 것이 맘에 걸려 class에 대한 공부 후 짜보았다. class사용에 조금 더 익숙해질 필요가 있는것 같다.
실행시간차이가 나는것으로 보아 malloc이 느리긴 느린것 같다. 결과를 보니
문제풀이
이진 탐색트리를 만드는 문제이다. BST 연습문제로 좋은 것 같다.
풀이1
malloc을 사용한 풀이이다.
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
typedef struct node *treePointer;
typedef struct node {
int data;
int num;
treePointer leftChild, rightChild;
}node;
treePointer root;
bool cmp(vector<int> a, vector<int> b) {
return a[1] > b[1];
}
vector<int> prevector;
vector<int> postvector;
void preorder(treePointer ptr) {
if (ptr) {
//printf("%d ", ptr->data);
prevector.push_back(ptr->num);
preorder(ptr->leftChild);
preorder(ptr->rightChild);
}
}
void postorder(treePointer ptr) {
if (ptr) {
postorder(ptr->leftChild);
postorder(ptr->rightChild);
postvector.push_back(ptr->num);
}
}
vector<vector<int>> solution(vector<vector<int>> nodeinfo) {
vector<vector<int>> answer;
treePointer temp;
root = (node*)malloc(sizeof(node));
for (int i = 0; i < nodeinfo.size(); i++) {
nodeinfo[i].push_back(i+1);
//cout << nodeinfo[i][2] << endl;
}
sort(nodeinfo.begin(), nodeinfo.end(), cmp);
root->data = nodeinfo[0][0];
root->num = nodeinfo[0][2];
root->rightChild = NULL;
root->leftChild = NULL;
for (int i = 1; i < nodeinfo.size(); i++) {
cout << nodeinfo[i][2] << endl;
temp = (node*)malloc(sizeof(node));
temp->data = nodeinfo[i][0];
temp->num = nodeinfo[i][2];
temp->rightChild = NULL;
temp->leftChild = NULL;
for (treePointer cur = root; ;) {
if (temp->data < cur->data) {
if (cur->leftChild) {
cur = cur->leftChild;
}
else {
cur->leftChild = temp;
break;
}
}
else {
if (cur->rightChild) {
cur = cur->rightChild;
}
else {
cur->rightChild = temp;
break;
}
}
}
}
preorder(root);
postorder(root);
answer.push_back(prevector);
answer.push_back(postvector);
return answer;
}
int main() {
vector<vector<int>> input = { {5, 3}, {11, 5}, {13, 3}, {3, 5}, {6, 1}, {1, 3}, {8, 6}, {7, 2}, {2, 2} };
solution(input);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
풀이2
tree class를 만들어 푼 풀이이다. 항상 tree구현시 malloc을 사용해 조금더 C++ 처럼 코드를 작성하고자 풀어보았다.
원래 그냥 int 만 사용해도 될것 같았지만 연습삼아 짜보는거라 자바의 제네릭처럼 데이터타입을 지정할수 있도록 작성하였다.
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
template <typename T>
class Tree;
template <typename T>
class TreeNode {
friend class Tree<T>;
private:
TreeNode* leftChild;
TreeNode* rightChild;
T data;
T num;
public:
TreeNode(T d,T n) {
data = d;
num = n;
leftChild = NULL;
rightChild = NULL;
}
};
vector<int> prevector;
vector<int> postvector;
template <typename T>
class Tree {
private:
TreeNode<T>* root;
public:
Tree() : root(NULL) {};
~Tree() {};
void insertNode(T data,T num) {
TreeNode<T>* node = new TreeNode<int>(data,num);
//NULL이 아니면 중복된 값이 입력되는거임
if (root == NULL) {
root = node;
return;
}
TreeNode<T>* parent = NULL;
for (TreeNode<T>* cur = root;;) {
if (node->data < cur->data) {
if (cur->leftChild) {
cur = cur->leftChild;
}
else {
cur->leftChild = node;
break;
}
}
else {
if (cur->rightChild) {
cur = cur->rightChild;
}
else {
cur->rightChild = node;
break;
}
}
}
}
void preorder(TreeNode<T>* ptr){
if (ptr) {
//printf("%d ", ptr->data);
prevector.push_back(ptr->num);
preorder(ptr->leftChild);
preorder(ptr->rightChild);
}
}
void postorder(TreeNode<T>* ptr) {
if (ptr) {
postorder(ptr->leftChild);
postorder(ptr->rightChild);
postvector.push_back(ptr->num);
}
}
TreeNode<T>* getRoot() {
return root;
}
};
bool cmp(vector<int> a, vector<int> b) { //내림차순 y축기준
return a[1] > b[1];
}
vector<vector<int>> solution(vector<vector<int>> nodeinfo) {
vector<vector<int>> answer;
for (int i = 0; i < nodeinfo.size(); i++) {
nodeinfo[i].push_back(i + 1);//node value 추가
}
sort(nodeinfo.begin(), nodeinfo.end(), cmp);
Tree<int>* bst = new Tree<int>();
for (int i = 0; i < nodeinfo.size(); i++) {
bst->insertNode(nodeinfo[i][0],nodeinfo[i][2]);
}
bst->preorder(bst->getRoot());
answer.push_back(prevector);
bst->postorder(bst->getRoot());
answer.push_back(postvector);
return answer;
}
int main() {
vector<vector<int>> input = { {5, 3}, {11, 5}, {13, 3}, {3, 5}, {6, 1}, {1, 3}, {8, 6}, {7, 2}, {2, 2} };
solution(input);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42892
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 SQL] 보호소에서 중성화한 동물 (0) | 2020.04.18 |
---|---|
[프로그래머스 49191] 순위 (0) | 2020.04.17 |
[2019 KAKAO BLIND RECRUITMENT] 매칭점수 (0) | 2020.04.08 |
[2018 KAKAO BLIND RECRUITMENT 3차] 방금그곡 (0) | 2020.04.07 |
[프로그래머스 level2] 조이스틱 (0) | 2020.04.04 |
Comments