백준 15650, 15652 (DFS)
하고싶은거/알고리즘 문제풀이2024. 4. 12. 11:24백준 15650, 15652 (DFS)

15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 과정 처음 보자마자 다중 for문이 생각났다. 다중 for문이면 대부분 DFS로 풀 수 있던걸 생각해서 DFS로 접근 처음에는 감이 안잡혔는데, 다음 그림을 그리게 된다. 1~6까지 수를 기준으로 3개의 숫자를 가진 수..

백준 12865 (DP)
하고싶은거/알고리즘 문제풀이2024. 4. 11. 16:04백준 12865 (DP)

12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 과정 처음에는 DP : 자신을 포함하는 물건들의 최대 가치 를 담는 용도였다. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N = 0; // 물건의 수 int K = 0; // 최대 무게 int W = 0; // 물건의 무게 i..

백준 11725 (트리, DFS)
하고싶은거/알고리즘 문제풀이2024. 4. 10. 19:13백준 11725 (트리, DFS)

11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 과정 대놓고 트리라고 하니까.. 그냥 DFS로 작성했다. 부모만 찾으면 되는 문제라 간단하지만;; vector선언과 메모리크기를 초기화하는 과정에서 vector와 array의 차이를 잘 모르고 있었던 것 같다. 나는 지금까지 왠만하면 vector의 크기를 MAX로 미리 고정하지 않고 resize를 통해 정해줬다. (그게 메모리적으로 이득이니까) 근데 이번 문제는 vector의 장점을 이용해서 하나의 index안에 여러값을 push_back 해야한다. 근데 이럴 경우, 선언 자체를 메모리값이 0인채로 해서 그런지 오류가 발생한다..

백준 11660 (DP, 행렬)
하고싶은거/알고리즘 문제풀이2024. 4. 9. 12:46백준 11660 (DP, 행렬)

11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 과정 x2-x1, y2-y1 범위에 들어있는 숫자를 for문으로 더할까 하다가 그럼 시간초과가 날 것 같아서 애초에 숫자를 받을 때, 같은 열!!!!! 기준으로 누적값을 벡터에 저장한 후, 범위를 받아서 최대좌표의 누적값 - 최소 좌표의 누적값 을 했다. 이 문제를 풀 때 가장 시간이 오래걸린 점은 바로 행렬을 개같이 못했다는 점이다. 행 = Row = x값 = 가로 열 = Column = y값 = 세로 코드 #inclu..

비선형 구조 : 그래프 DFS, BFS, 다익스트라
하고싶은거/자료구조&알고리즘 공부2024. 4. 8. 17:15비선형 구조 : 그래프 DFS, BFS, 다익스트라

선형 구조 : 자료를 순차적으로 나열한 형태 배열 연결 리스트 스택/큐 비선형 구조 : 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태 트리 그래프 그래프 구성 요소 정점(Vertex) : 데이터 간선(Edge) : 정점들을 연결하는데 사용 가중치 그래프 : 각 간선에 가중치(중요도, 거리등)가 있는 그래프 방향 그래프 : 정점간의 방향이 있는 그래프 DFS 깊이 우선 탐색 Depth First Search 막다른 길(더이상 연결된 간선이 없을 때 까지)이 나올 때까지 정점을 계속 방문 하는 그래프 끝까지 갔다가 다시 시작 정점으로 돌아오는 부분은 재귀함수로 구현할 수 있다. 그래프의 전체적인 모양을 파악하기 쉽다. void Dfs(int here) { // 방문 visited[here] = true;..

백준 11053 (DP)
하고싶은거/알고리즘 문제풀이2024. 4. 8. 11:42백준 11053 (DP)

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 과정 맨 처음 문제를 보고 너무 쉽다고 생각했다. 그냥 수열 받을 때 마다 최대값 저장해서 비교하면 되는거 아닌가? 해서 나온 코드.. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N = 0; // 수열의 크기 ve..

백준 1629 (재귀함수)
하고싶은거/알고리즘 문제풀이2024. 4. 7. 18:48백준 1629 (재귀함수)

1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net 과정 일단.. 문제가 너---무 단순해서 뭘 원하는지 파악하기에 당황했다. 단순히 A를 B만큼 곱하고, C로 나눈 후 나머지를 구하는건데, A를 B만큼 곱하는 과정에서 뻔하게 A를 B만큼 for문으로 곱하면 100000% 시간초과에 걸릴 것 같고.. C로 나누는 거에 뭐가 있나? 싶기도 하고.. 일단, 시간 초과 관련해서는 아래와 같은 코드를 작성해줌으로서 조금 완화된다는 것을 알고 있다. ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 거듭제곱에 대한 또다..

하고싶은거/알고리즘 문제풀이2024. 4. 5. 20:56백준 1149 (DP)

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 과정 음.. 그니까 내집 기준 앞번호, 뒷번호랑 집의 색까리 같으면 안된다. 그리고 색칠하는 비용이 모두 다르고, 최소값을 구하라고 하니까, DP와 min을 사용해서 코드를 짜볼것이다. 고민을 가장 많이 한 부분은 단순 최소값만 생각할게 아니라, 색의 종류도 함께 고민을 해야한다는 점이었다. key:value로 넣을 것인지, 아니면 그냥 RGB순서로 인덱스로 구분할 것인지 고민했다. : 이 부분은 코드를 짜다보니, 어차피 DP라는 특성상 현..

min 함수 오류 : required from here
하고싶은거/삽질2024. 4. 5. 20:52min 함수 오류 : required from here

문제 min함수에 대해 오류가 발생했다. 과정 처음에는 #include 을 빼먹었길래 이거때문인줄 알고 추가했는데, 해결되지 않았다. 그래서 오류내용을 다시보니;; gcc-11.1.0/include/c++/11.1.0/bits/stl_algobase.h: In instantiation of ‘constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare) [with _Tp = int; _Compare = int]’: 라고 한다. 즉, min() 자체에는 2개 인자만 받을 수 있다는 것. 근데 분명 내 기억속에 min에 3개 이상을 받았던거 같은데 이상했다. 그래서 검색해보니, min(a, min(b, c)) 이렇게 작성하던가, min({a, b, c}) ..

백준 1107 ( 브루트 포스 방법)
하고싶은거/알고리즘 문제풀이2024. 3. 31. 23:47백준 1107 ( 브루트 포스 방법)

1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 www.acmicpc.net 과정 원하는 채널에 가장 가까운 번호(W) 찾기 → 100에서 W 까지 버튼 수 체크 → (W - 원하는 채널) 해서 +,-수 체크 이런식으로 계획했다. 원하는 채널에 가장 가까운 번호를 어떻게 찾는지가 가장 처음으로 고민한 주제이다. 원래는 원하는 채널 번호 기준 가장 가까운 채널번호를 구해서 +, -수만 더 추가하려고 했는데, 생각해보니 100부터 시작이니까 가장 가까운 채널번호가 가장 적게 버튼을 누른다는 보장도 없고, 버튼이 죄다 고장났..

image