본문 바로가기

전체 글

(52)
백준 14501번 퇴사 https://www.acmicpc.net/problem/14501 이 문제는 혼자 힘으로 하려다가.. 결국 다른사람의 코드를 보고 이해하였다. 아래가 참조한 블로그이다.http://jongnan.tistory.com/9 풀이1. N번째 날에 가질 수 있는 최대 금액 d[N] 을 구해야 한다. 2. N번째 날에 선택할 수 있는 경우는 2가지이다. - N번째날 상담을 한다 -> N번째 날 금액(P)을 받고, T일이 지난 후에 다시 상담여부 결정 ( find(day + T[day]) + P[day] ) - N번째날 상담을 하지 않는다. -> 다음 날부터 다시 상담여부를 결정 ( find(day + 1) ) 3. 딱 N번째 날에 끝난다면 - 0을 반환 ( day == N + 1 ) N번째 날을 초과한다면 - ..
백준 15686번 치킨배달 https://www.acmicpc.net/problem/15686 위 문제는 모든 경우의 수를 다 탐색해야하는 문제이며 백트래킹 알고리즘을 적용해야 한다.예를들어 5개의 치킨집이 있고, 그 중 2개를 방문해야 한다면 1. 1 1 0 0 02. 1 0 1 0 03. 1 0 0 1 0 ... ... 0 0 0 1 1 까지 모든 경우의 수를 탐색해야 한다. 최대 M 개의 치킨집을 찾았다면 해당 case 에서 최소 거리가 되는 치킨거리를 구한다.이후 위에서 설명한 모든 경우의 수에서 최소 거리가 되는 치킨거리를 구하면 된다. #include #include #include using namespace std;vector clients;vector stores;bool visit[13] = {false, };i..
백준 2455번 지능형 기차 https://www.acmicpc.net/problem/2455 #include #include int d[4] = {0, };using namespace std;int main(){ int in[4] = {0, }, out[4] = {0, }; int idx = 0, result = 0; for (int i = 0 ; i
백준 15685번 드래곤 커브 https://www.acmicpc.net/problem/15685 N번째 세대에서 방문할 수 있는 (y, x) 를 구하는 방법은 아래와 같다. 1. N-1 번째 세대의 (y, x)에선 N번째 세대에서 쓰일 커브의 방향을 스택에 push 한다. 이후, N번째 세대에선2. N-1 번째의 마지막 지점을 시작으로 하여 스택에 쌓아둔 커브의 방향대로 (y, x) 를 방문한다. 이를 연속적으로 반복하여 각 세대에서 그려질 수 있는 점들을 방문하고, 마지막엔 특정 (x, y)를 기준으로 3방향을 검사하여 직사각형의 갯수를 구하였다. #include #include #include #define MAX 100#define RIGHT 0#define UP 1#define LEFT 2#define DOWN 3using ..
백준 1931번 회의실 배정 https://www.acmicpc.net/problem/1931 위 알고리즘은 그리디 알고리즘의 기본이다.자세한 설명은https://www.zerocho.com/category/Algorithm/post/584ba5c9580277001862f188에 더 잘 나와있다. #include #include #include #include using namespace std;int main(){ int n, start, end; vector v; scanf("%d", &n); for (int i = 0; i
백준 9012번 괄호 https://www.acmicpc.net/problem/9012 #include #include #include #pragma warning(disable:4996)using namespace std;int main(void) {int test_case = 0;char str[51] = { 0, };scanf("%d\n", &test_case);for (int i = 0; i
백준 2805번 나무자르기 https://www.acmicpc.net/problem/2805 #include #include #include #pragma warning(disable:4996)#define MAX 1000000using namespace std;long long N, M;long long tree[MAX + 1];int main(){scanf("%lld %lld", &N, &M);for (int i = 0; i
백준 2512번 예산 https://www.acmicpc.net/problem/2512 #include #include #pragma warning(disable:4996)#define MAX 10000using namespace std;int numOfCity;int city[MAX + 1];int main(){int sum = 0, result = 0, i = 0;scanf("%d", &numOfCity);for (int i = 0; i