별로 역 삼각형 모양을 만드는 문제입니다. 5를 입력하면 5층짜리 역삼각형이 만들어집니다. #include using namespace std; int main(int argc, char *argv[]) { int x; cin >> x; for(int i=0;i
for문을 이용해서 피라미드 모양 별을 찍는 문제입니다. 5를 입력하면 5줄짜리 피라미드가 완성됩니다. #include using namespace std; int main(int argc, char *argv[]) { int x; cin >> x; for (int i = 0; i 0 + i; --j) { cout
n의 날짜가 주어집니다. 각각 출석, 지각, 결석을 할 수 있는데 지각을 2번하거나, 결석을 연속3번하면 개근상을 받지 못합니다. 이 때 개근상을 받을 수 있는 경우의 수를 구하는 문제입니다. (경우의 수를 100만으로 나눈 나머지를 출력합니다.) memo[지각][결석]으로 값들을 저장했습니다. 출석과 지각, 결석으로 만들 수 있는 경우의 수는 지각 0 결석 0 지각 0 결석 1 지각 0 결석 2 지각 1 결석 0 지각 1 결석 1 지각 1 결석 2 입니다. 지각 0 결석 0은 - 지각 0 결석 0 (출석) - 지각 1 결석 0 (지각) - 지각 0 결석 1 (결석) 의 3가지 경우의 수를 만들 수 있습니다. 이와 같은 경우의 수를 미리 입력하고 재귀함수를 이용해서 각각의 값들이 더해지면서 풀도록 만들었..
5개(n)의 방이 있을때 1 - 1 2 3 4 5 2 - 2 4 3 - 3 4 - 4 5 - 5 와 같이 각각의 배수인 방에서 문이 열려있다면 닫고 닫혀있다면 여는 문제입니다. bool 형식으로 room을 100개의 방을 만들어 주었고 해당하는 숫자에 방문을 하였을 시 false -> true로, true -> false로 변경해 주었습니다. 마지막에 true(열림)의 갯수를 체크하여 나가는 사람의 수를 확인했습니다. #include using namespace std; bool room[100]; void init() // 배열 초기화 { for (int i = 0; i < 100; ++i) { room[i] = false; } } int main(int argc, char *argv[]) { int ..
1원당 열량이 가장 높은 피자를 만들 때 그 열량이 얼마인지 출력하는 문제입니다. 도우를 반드시 올려야하며 토핑은 선택할 수 있습니다. (같은것 두개 선택 불가) 가격은 도우가격 + (토핑가격 * 토핑갯수) 입니다. 이 때 가장 높은 열량을 만들 수 있는 방법을 찾는 문제입니다. (예제 풀이) 1원당 열량을 구하려면 열랑/가격을 해주었습니다. 200 / 12 = 16.666 (도우의 1원당 열량) 50 / 2 = 25 (토핑1 1원당 열량) 300 / 2 = 150 (토핑2 1원당 열량) 100 / 2 = 50 (토핑3 1원당 열량) 먼저 도우의 1원당 열량 보다 높은 수치가 있는지 확인을 합니다. 없다면 도우만 올리는것이 최고의 피자를 만드는 것입니다. 있다면 높은 숫자를 먼저 도우와 합치고 다시 계산..
첫번째줄에는 사람 수를 받고 두번째줄은 왼쪽에 자신보다 큰 사람이 몇명이 있는지를 나타냅니다. 두번째줄에 차례대로 키가 1부터 2, 3 .... 으로 증가합니다. 예제에는 4명이 입력되었으며 키가 1, 2, 3, 4 인 사람이 있다고 볼 수 있습니다. 키가 1인 사람은 왼쪽에 자신보다 큰 사람이 2명 키가 2인 사람은 왼쪽에 자신보다 큰 사람이 1명 키가 3인 사람은 왼쪽에 자신보다 큰 사람이 1명 키가 4인 사람은 왼쪽에 자신보다 큰 사람이 0명 있으므로 4 2 1 3 순으로 서있습니다. 3가지 절차를 통해 문제를 풀었습니다. 1. 왼쪽큰인원 +1명을 하게 되면 큰 인원을 제외한 자리를 찾을 수 있습니다. 2. 왼쪽에 작은 인원이 몇명 있는지 체크를 하면서 그 만큼 더 오른쪽으로 이동합니다. 3. 이미..
시작위치에서 끝위치까지 최단 비용으로 가는 문제입니다. 위, 아래, 오른쪽 왼쪽으로 이동하면서 가중치를 비교하면서 최단거리를 찾습니다. #include #include #include #include #define INF 100000 using namespace std; typedef pair pii; int adj[130][130]; //위치 값 int dist[130][130]; // 가중치 값 int main() { int tCase = 1; while (tCase++) { int n; //n*n 행렬 cin >> n; //n*n 행렬 입력 if (!n) break; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { dist[i][j] = INF..
모든 네트워크의 정점을 최소 비용으로 연결하는 문제입니다. 크루스컬(kruskal) 알고리즘을 사용해서 문제를 풀었습니다. 크루스컬(kruskal) 알고리즘은 그리디 알고리즘을 이용해서 사이클이 형성되지 않으면서 비용이 적은 간선부터 차례대로 선을 연결합니다. #include #include using namespace std; #define MAX_VERTICES 1000 int parent[MAX_VERTICES]; int num[MAX_VERTICES]; typedef struct Node { int value; int from; int to; Node(int value, int from, int to) : value(value), from(from), to(to) { } Node() : value..