본문 바로가기

알고리즘

C++ 이진 탐색 트리 구현 ( Binary Search Tree C++) bst 트리:: 루트노드의 왼쪽노드는 루트노드 보다 작은 값 오른쪽노드는 루트노드 보다 큰 값으로 정렬 삽입,삭제,검색의 시간복잡도:: 평균 O(logN) , 최악 O(N) /* BST(Binary Search Tree) 이진탐색트리 구현 - 2019/12/28 xtar.tistory */ #include using namespace std; template struct Node { Node* left; Node* right; T value; }; template class BinarySearchTree { public: BinarySearchTree() :root(nullptr) {}; ~BinarySearchTree() {}; void AddNode(T _value); bool SearchValue(.. 더보기
C++ 싱글 링크드 리스트 구현 (Singly Linked List C++) 싱글 링크드 리스트는 단일 방향으로 한 노드는 값과 다음 노드를 가리키는 주소를 가지고 있다. 싱글 링크드의 제일 앞에 있는 값을 Front 또는 Head라고 함 싱글 링크드의 제일 뒤에 있는 값을 Back 또는 Tail이라고 함 node->value 현재의 노드가 저장한 값 node->next 다음 노드를 가리키는 주소 싱글 링크드 리스트에서 노드가 삭제될 때 전 노드는 삭제되는 노드의 다음 값만 가리키면 된다. 그 후 삭제될 노드는 delete를 이용해 동적 할당을 해제해 준다. 싱글 링크드 리스트에서 노드가 중간에 삽입될떄 새로 들어오는 노드는 기존에 있던 자리의 노드가 가리킨 앞의 노드를 가리키고 기존의 노드는 새로 들어온 노드를 가리키면 된다. (빨간색: 새로운 노드, 파란색: 기존 노드, 초록.. 더보기
프로그래머스 코딩테스트 연습 - 예산 LV1: (C++) 1.문제 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원해 줄 수 있는지 return 하도록 solution 함수를 완성해주세요. 2.입력 d budget re.. 더보기
백준 1193번: 분수찾기 (C++) 1.문제무한히 큰 배열에 다음과 같이 분수들이 적혀있다.1/11/21/31/41/5…2/12/22/32/4……3/13/23/3………4/14/2…………5/1……………………………이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 2.입력첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 3.출력 첫째 줄에 분수를 출력한다. 소스코드#include using namespace std; int main() { int numerator=0; //분자 int denominator=0; //분모 int inputNu.. 더보기
백준 2292번: 벌집 (C++) 1.문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 2.입력첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 3.출력 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 소스코드#include using namespace std; int main() { int hive = 6; // 두번쨰 벌집 .. 더보기
백준 2438번: 별 찍기 -1 (C++) 1.문제첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 2.입력첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 3.출력 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 소스코드#include using namespace std; int main() { int star; // N 갯수 cin >> star; // N 입력 if (star 100) // 1 더보기
백준 10039번: 평균 점수 (C++) 1.문제상현이가 가르치는 아이폰 앱 개발 수업의 수강생은 원섭, 세희, 상근, 숭, 강수이다.어제 이 수업의 기말고사가 있었고, 상현이는 지금 학생들의 기말고사 시험지를 채점하고 있다. 기말고사 점수가 40점 이상인 학생들은 그 점수 그대로 자신의 성적이 된다. 하지만, 40점 미만인 학생들은 보충학습을 듣는 조건을 수락하면 40점을 받게 된다. 보충학습은 거부할 수 없기 때문에, 40점 미만인 학생들은 항상 40점을 받게 된다.학생 5명의 점수가 주어졌을 때, 평균 점수를 구하는 프로그램을 작성하시오. 2.입력입력은 총 5줄로 이루어져 있고, 원섭이의 점수, 세희의 점수, 상근이의 점수, 숭이의 점수, 강수의 점수가 순서대로 주어진다.점수는 모두 0점 이상, 100점 이하인 5의 배수이다. 따라서, 평.. 더보기
백준 8958번: OX퀴즈 (C++) 1.문제"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다."OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 2.입력첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다. 3.출력각 테스트 케이스마다 점수를 출력한다. 소스코드#include using namespace std; int main() { ch.. 더보기
백준 2577번: 숫자의 개수 (C++) 1.문제세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다. 2.입력첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. 3.출력 첫째 줄에는 A×B×C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A×B×C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지.. 더보기
백준 1152번: 단어의 개수 (C++) 1.문제영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 2.입력첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. 3.출력첫째 줄에 단어의 개수를 출력한다. 소스코드 #include using namespace std; #define MAX_WORD 50 // 최대문자열 int main() { char str[MAX_WORD]; //입력할 문장 int wordCnt=1; //단어 갯수 cin.getline(str,MAX_WORD);.. 더보기