본문 바로가기

Algorithm (알고리즘)

백준 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의 배수이다. 따라서, 평.. 더보기
백준 2920번: 음계 (C++) 1.문제다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다.1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다.연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오. 2.입력첫째 줄에 8개 숫자가 주어진다. 이 숫자는 문제 설명에서 설명한 음이며, 1부터 8까지 숫자가 한 번씩 등장한다. 3.출력 첫째 줄에 ascending, descending, mixed 중 하나를 출력한다. 소스코드#define _CR.. 더보기
백준 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);.. 더보기
백준 1110번: 더하기 사이클 (C++) 1.문제0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오. 2.입력첫째 줄.. 더보기
백준 4344번: 평균은 넘겠지 (C++) 1.문제대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 2.입력첫째 줄에는 테스트 케이스의 개수 C가 주어진다.둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 3.출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 소스코드#include #include using namespace std; int main() { int stdNum; //학생수 int sum; //합계 int stdCnt; //평균학생 수 double average; // 소.. 더보기
Quick Sort (C++ 퀵정렬) Quick Sort C++퀵정렬 퀵 정렬은 기준점(pivot)을 정하고 앞(left)와 뒤(right)를 비교하면서 정렬을 하는 알고리즘입니다. 장점: 수행속도가 빠른 정렬 알고리즘이다.단점: 중심값이 같을 경우에는 배열의 순서가 파괴 될 수도 있으며 안정성이 없다는 점이다. *퀵 정렬에 대한 자세한 메소드 설명은 소스 코드의 주석 참조//퀵 정렬 소스코드 #include using namespace std; int Partiton(int arr[], int left, int right); // 퀵 정렬 메소드 (나누기) void QuickSort(int arr[], int left, int right); // 퀵 정렬 메소드 (재귀) void Swap(int *A, int *B); // 값 교환 메소드.. 더보기