본문 바로가기

전체 글92

[백준] 1049번 기타줄 (그리디 알고리즘) -문제 1. 세트가격의 최솟값은 세트가격들과 (낱개가격 * 6)에서 최솟값 찾기 2. 낱개가격의 최솟값은 낱개가격들에서 최솟값 찾기 3. 세트가격으로 살 수 있을 만큼 구매하고(q개), 남은 개수(r개)는 세트가격과 (낱개가격 * r)가격 비교해서 최솟값으로 선택하기 -코드 #include using namespace std; int main() { int n, m, tmp1=0, tmp2=0, setMin = 1000, oneMin = 1000, sum =0 ; scanf("%d %d", &n, &m); for (int i = 0; i < m; i++) { scanf("%d %d", &tmp1, &tmp2); if (tmp1 < setMin) setMin = tmp1; if (tmp2 < oneMin).. 2022. 8. 15.
[백준] 1715번 카드 정렬하기 (그리디 알고리즘, 우선순위큐) -문제 -코드 #include #include using namespace std; int main() { int n, sum =0,k, tmp1, tmp2, tmp; scanf("%d", &n); priority_queue pq; //오름차순 for (int i = 0; i 1) { tmp1 = pq.top(); pq.pop(); tmp2 = pq.top(); pq.pop(); tmp = tmp1 + tmp2; sum += tmp; if(!pq.empty()) pq.push(tmp); } printf("%d", sum); return 0; } 2022. 8. 9.
[백준] 1520번 내리막 길 (DFS + DP) -문제 -코드 #include using namespace std; int n, m; int map[501][501], dp[501][501]; int dx[4] = { 1, 0, -1, 0 }; int dy[4] = { 0, 1, 0, -1 }; int DFS(int x, int y) { int xx, yy; if (x == n && y == m) return 1; if (dp[x][y] != -1) return dp[x][y]; dp[x][y] = 0; for (int i = 0; i < 4; i++) { xx = x + dx[i]; yy = y + dy[i]; if (xxn || yym) continue; if (map[xx][yy] < map[x][y]) { dp[x][y] += DFS(xx, y.. 2022. 8. 8.
[백준] 1987번 알파벳 (DFS) -문제 -코드 #include using namespace std; int dx[4] = { 0,1,0,-1 }; int dy[4] = { 1,0,-1,0 }; int ch[26], r, c, res=0; char map[20][20]; void DFS(int x, int y, int cnt) { for (int i = 0; i = r || yy >= c) continue; if (ch[map[xx][yy] - 'A'] == 0) { ch[map[xx][yy] - 'A'] = 1; DFS(xx, yy, cnt+1); ch[map[xx][yy] - 'A'] = 0;.. 2022. 8. 8.