본문 바로가기

c++

(77)
백준 : 제곱수의 합 C++ (DP 연습!!) www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 풀이 및 후기 DP는 너무 어렵다 1. 일단 모두 1만 써서 더하는 경우는 항의 수가 자기 자신이므로 그것으로 초기화! 2. 그다음에 본인보다 작은 제곱수를 뺀 모든 경우에서의 DP값들 중 최솟값을 구하기 #include #include #include #include #include #include using namespace std; int main() { int n;..
백준 : 퇴사 c++ www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 1. DFS로 풀었다. 경우는 두가지 1) 그날에 주어진 일을 한다! -> 일을 했으면 이게 끝나는 다음날로 이동!! 2) 그날에 주어진 날은 안하고 다음날로 넘어간다! -> 기존 day에 +1 #include #include #include #include #include using namespace std; int n; int answer = 0; vector v; void dfs(int day, int sum) { if (day > n) { answer = max(sum, answer); return; } //1번경우는 지금 날에 잡혀있..
프로그래머스 : 거스름돈 C++ (DP 사용) programmers.co.kr/learn/courses/30/lessons/12907?language=cpp 코딩테스트 연습 - 거스름돈 Finn은 편의점에서 야간 아르바이트를 하고 있습니다. 야간에 손님이 너무 없어 심심한 Finn은 손님들께 거스름돈을 n 원을 줄 때 방법의 경우의 수를 구하기로 하였습니다. 예를 들어서 손님께 5 programmers.co.kr 풀이 1. 처음에 그냥 DFS 썻다가 효율성 테스트에서 시간초과 뜨더라 #include #include #include #include using namespace std; bool cmp(int a, int b) { return a>b; } int answer = 0; void dfs(int now,int index, vector mone..
프로그래머스 : 기지국 설치 C++ programmers.co.kr/learn/courses/30/lessons/12979?language=cpp 코딩테스트 연습 - 기지국 설치 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5 programmers.co.kr 풀이 및 후기 1. 난 진짜 빡구현보다 이런게 더 어렵다, 아무리 문제를 풀어도 왜 생각이 안날까 1) index 두개로 관리한다 - station, 오름차순으로 정렬되어 있다 - now, 지금 내 위치! 2) now가 n까지 갈때까지 while 루프 지금 위치에 전파가 안온다면 기지국 설치 -> 지금 위치를 왼쪽끝에 걸치게 설치하는..
프로그래머스 : 길찾기 게임 C++ programmers.co.kr/learn/courses/30/lessons/42892?language=cpp 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr 풀이 겸 후기 1. 그동안 알고리즘 풀때 포인터를 진짜 거의 안썻는데 이 문제는 포인터 없이는 너무 힘들어서 포인터 공부좀 다시 했다 2. 원래 주어진 벡터를 그냥 index로 치면 몰라도 이건 주어진 노드 정보들을 한번 sort하고 트리 구성하는거라 이게 훨씬 편하더라 1) 노드 stuct - 좌표정보랑, 자식 두명 포인터 2) 초기화 과정 3) 좌표를..
프로그래머스 : 지형 이동 c++ programmers.co.kr/learn/courses/30/lessons/62050 코딩테스트 연습 - 지형 이동 [[1, 4, 8, 10], [5, 5, 5, 5], [10, 10, 10, 10], [10, 10, 10, 20]] 3 15 [[10, 11, 10, 11], [2, 21, 20, 10], [1, 20, 21, 11], [2, 1, 2, 1]] 1 18 programmers.co.kr 풀이 1. 일단 모든 지역을 사다리 없이 이동할 수 있는 구역으로 묶는다 2. 이제 크루스칼을 사용 1) 하나의 지역은 노드 2) 인접해있는 다른 지역으로 이동할때 드는 사다리 비용이 간선 길이 3) 간선의 정보는 struct 로 저장 -> 섬 두개, 비용 4) 비용에 따라 오름차순으로 정렬하고 유니온파인..
프로그래머스 : 가장 먼 노드 C++ BFS programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 후기 1. 심플한 BFS다 BFS는 문제만 다르지 푸는 방식이 다 똑같아서 쉬운거 같다 #include #include #include #include using namespace std; vector map[20001]; int solution(int n, vector edge) { int answer = 0; int length[20001];// length[2] 는 1번노드에서 2번노드까지 거리 int visited[20001]; memse..
프로그래머스 : 순위 C++ (플로이드 와샬 활용) programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 풀이 1. 플로이드 와샬 다시 한번 복습했다, 굉장히 유용할거같다 ex) a->b 가 있고 b-> c 가 있다면 a->c 도 있다는거!! 2. 같은 의미로 a가 b를 이기고, b가 c를 이겼으면 a가 c를 이긴거나 마찬가지 3. 모두 정리 후에 다른 사람들 모두와의 상대전적이 남아있다면 그것의 순위를 알수있다는거! #include #include using namespace std; int solution(int n, vector results) { int answer = 0; in..