목록알고리즘 (19)
호빵이의 알고리즘
https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 | 프로그래머스 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 partic programmers.co.kr #include #include #include #include..
https://programmers.co.kr/ 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr https://www.acmicpc.net/ Baekjoon Online Judge Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다. www.acmicpc.net https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1단계 . 프로그래머스에서 모든 문..
문제 주소 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq #include using namespace std; int N, T, K, t, ans; int map[9][9]; int high; int dx[4] = { 1,0,-1,0 }; int dy[4] = { 0,1,0,-1 }; bool visited[9][9]; int cnt; void solve(int _i, int _j) { cnt++; if (ans < cnt) ans = cnt; //3. 가장 긴 등산로 찾기 for (int i = 0; i < 4; i++) { int next_x = _i + dx[i]; i..
[동적 계획법] - 큰 의미에서 분할 정복과 같은 접근 방식 - 어떤 부분 문제는 두 개 이상의 문제를 푸는데 사용될 수 있기 때문에, 이 문제의 답을 여러 번 계산하는 대신 한 번만 계산하고 계산 결과를 재활용함으로써 속도의 향상을 꾀할 수 있다. -> 각 문제의 답을 메모리(캐시)에 저장해 둘 필요가 있다! 왜냐하면 중복 호출이 기하급수적으로 증가하기 때문에 계산량의 낭비를 피하기 위해! 반환 값이 일정하다는 사실을 이용하면 답을 저장하는 캐시 배열을 만들어서 각 입력에 대한 반환 값을 저장할 수 있다. 이와 같이 함수의 결과를 저장하는 장소를 마련해 두고, 한 번 계산한 값을 저장해 뒀다 재활용하는 최적화 기법을 메모이제이션이라고 한다. //-1로 초기화해 둔다. int cache[30][30]; ..
#include #include #include using namespace std; int N, x, y, d, g, cnt = 0; bool visited[101][101]; int dx[4] = {1,0,-1,0}; int dy[4] = {0,-1,0,1}; vector V[11]; void init() { for (int i = 0; i > N; for (int i = 0; i > x >> y >> d >> g; solve(); } find(); cout
#include #include using namespace std; int N, ret; int T[16], P[16]; int next_day, total = 0; void solve(int day, int sum) { if (day == N+1) { ret = max(ret, sum); return; } next_day = day + T[day]; total = sum + P[day]; if (next_day N; for (int i = 1; i > T[i] >> P[i]; solve(1, 0); cout
1. 재귀호출 우리가 들여다보는 범위가 작아지면 작아질수록 각 조각들의 형태가 유사해지는 작업들을 많이 볼 수 있다.(완전히 같은 코드를 반복해 실행하는 for 같이 반복문이 예가 될 수 있다!)이런 작업을 구현할 때 유용하게 사용되는 개념이 바로 재귀함수(recursive function), 혹은 재귀 호출(recursion)이다. 재귀 함수란 자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고, 나머지를 자기 자신을 호출해 실행하는 함수이다.아래 코드는 자연수 n이 주어졌을 때 1부터 n까지의 합을 반환하는 함수 sum()의 구현을 보여준다. //1부터 n까지의 합을 계산하는 반복 함수와 재귀 함수 //결과 : 1부터 n까지의 합을 반환한다. int sum(int n..