silver BOJ 1890 : 점프 - C++ 문제 접근 DFS를 통해 완전탐색으로 경로 찾기 --> N이 100이라서 너무커서 시간초과가 확실 방향이 증가밖에 없으니 vis없이 BFS를 수행하면 모든 경로의 수를 찾을 수 있을 것이라 생각 --> N이 작은 경우만 가능 / N이 커지면 시간초과 발생 & 메모리초과 발생 --> BFS / DFS를 방문체크(vis)없이 수행하면 N에 따라 지수적으로 중복 방문이 늘어나서 메모리 초과가 난다... DFSsilverDPbojDFS BOJ 2110 : 공유기 설치 - C++ 이분탐색 문제에 적응중 로직 집 사이간 간격에 따라 심을 수 있는 공유기 수 를 구하고 우리가 세우려는 C개 보다 크거나 같을 때 간격을 늘리면서 결국 C개의 공유기를 심을 수 있는 최대 거리를 구한다 이분탐색 구현시 주의 답을 기억하는 =(등호)가 붙는 방향은 앞으로 답이 될 수 있는 가능성이 있는 쪽에 붙여주어야 한다 left의 초기값을 0으로 하면 나누는 값인 mid가 0이될 수 있으니... silver이분탐색bojboj BOJ 2644 : 촌수계산 - C++ DFSsilverbojDFS BOJ 2447 : 별찍기 10 - C++ 원리 1) 일정 구역에서 항상 중간에 해당되는 부분은 ' '값을 가지도록 저장 (y와 x의 범위가 y+size/3 ~ y+size/3+size/3 x+size/3 ~ x+size/3+size/3 일 때 항상 ' '값을 가짐) 2) 가운데 부분을 제외하고 나머지 8부분에 대해 재귀 수행 다른 풀이는 ? : ' ' 값을 가지는 좌표들의 특징을 찾아서 해결함 (y/size%3 == 1 && x/s... 재귀silverbojboj BOJ 1063 : 킹 - C++ 주의 행의 방향이 8과 1이 보통 풀던 방향과 다르다는 것을 인지해야한다 느낀 점 문제를 꼼꼼하게 읽고 확인하자... silver시뮬레이션bojboj BOJ 2485 : 가로수 - C++ key point 각 나무들 간의 간격의 크기들을 모두 구해서 모두에 대한 GCD(최대 공약수)를 구해야 함 ans = 심을 수 있는 나무의 수 - 미리 심은 나무의 수 심을 수 있는 나무의 수 = (마지막 나무 위치 - 처음 나무 위치)/gcd + 1 (마지막 +1은 처음 나무 개수를 세준 것!)... silver최대공약수bojboj BOJ 15654 : N과M (5) - C++ 수가 정해져 있기 때문에 save 변수를 쓰는데, 사전순 증가로 출력해야 하기 때문에 정렬하려고 vector<int> save로 선언 next_permutation()을 2중으로 써야함 1) 전체 N개에서 M개를 뽑은 숫자들 구하는 do~while 2) 뽑은 M개 숫자에 대해 다시 경우의 수를 구하는 do~while vector<vector<int>> ans에 대해 오름차순 정렬하면 요소별로... bojsilver백트래킹boj BOJ 11052 : 카드 구매하기 - C++ 느낀 것 : 재귀를 통한 완전탐색풀이밖에 떠오르지 않아서 결국 힌트를 참조 풀이 : DP를 이용한 풀이를 해야한다 (DP[i] = i개의 카드를 뽑는데 필요한 최대 비용)... silverDPbojDP BOJ 15649 : N과 M (1) - C++ 백트래킹 문제 유형 : 특정 조건을 만족하는 모든 경우의 수를 수행하는 방법 (경우의 수를 진행하다가 막히면 가장 마지막으로 성공한 부분으로 돌아가 다른 경우로 진행하는 것 -> 백트래킹)... silverboj백트래킹boj
BOJ 1890 : 점프 - C++ 문제 접근 DFS를 통해 완전탐색으로 경로 찾기 --> N이 100이라서 너무커서 시간초과가 확실 방향이 증가밖에 없으니 vis없이 BFS를 수행하면 모든 경로의 수를 찾을 수 있을 것이라 생각 --> N이 작은 경우만 가능 / N이 커지면 시간초과 발생 & 메모리초과 발생 --> BFS / DFS를 방문체크(vis)없이 수행하면 N에 따라 지수적으로 중복 방문이 늘어나서 메모리 초과가 난다... DFSsilverDPbojDFS BOJ 2110 : 공유기 설치 - C++ 이분탐색 문제에 적응중 로직 집 사이간 간격에 따라 심을 수 있는 공유기 수 를 구하고 우리가 세우려는 C개 보다 크거나 같을 때 간격을 늘리면서 결국 C개의 공유기를 심을 수 있는 최대 거리를 구한다 이분탐색 구현시 주의 답을 기억하는 =(등호)가 붙는 방향은 앞으로 답이 될 수 있는 가능성이 있는 쪽에 붙여주어야 한다 left의 초기값을 0으로 하면 나누는 값인 mid가 0이될 수 있으니... silver이분탐색bojboj BOJ 2644 : 촌수계산 - C++ DFSsilverbojDFS BOJ 2447 : 별찍기 10 - C++ 원리 1) 일정 구역에서 항상 중간에 해당되는 부분은 ' '값을 가지도록 저장 (y와 x의 범위가 y+size/3 ~ y+size/3+size/3 x+size/3 ~ x+size/3+size/3 일 때 항상 ' '값을 가짐) 2) 가운데 부분을 제외하고 나머지 8부분에 대해 재귀 수행 다른 풀이는 ? : ' ' 값을 가지는 좌표들의 특징을 찾아서 해결함 (y/size%3 == 1 && x/s... 재귀silverbojboj BOJ 1063 : 킹 - C++ 주의 행의 방향이 8과 1이 보통 풀던 방향과 다르다는 것을 인지해야한다 느낀 점 문제를 꼼꼼하게 읽고 확인하자... silver시뮬레이션bojboj BOJ 2485 : 가로수 - C++ key point 각 나무들 간의 간격의 크기들을 모두 구해서 모두에 대한 GCD(최대 공약수)를 구해야 함 ans = 심을 수 있는 나무의 수 - 미리 심은 나무의 수 심을 수 있는 나무의 수 = (마지막 나무 위치 - 처음 나무 위치)/gcd + 1 (마지막 +1은 처음 나무 개수를 세준 것!)... silver최대공약수bojboj BOJ 15654 : N과M (5) - C++ 수가 정해져 있기 때문에 save 변수를 쓰는데, 사전순 증가로 출력해야 하기 때문에 정렬하려고 vector<int> save로 선언 next_permutation()을 2중으로 써야함 1) 전체 N개에서 M개를 뽑은 숫자들 구하는 do~while 2) 뽑은 M개 숫자에 대해 다시 경우의 수를 구하는 do~while vector<vector<int>> ans에 대해 오름차순 정렬하면 요소별로... bojsilver백트래킹boj BOJ 11052 : 카드 구매하기 - C++ 느낀 것 : 재귀를 통한 완전탐색풀이밖에 떠오르지 않아서 결국 힌트를 참조 풀이 : DP를 이용한 풀이를 해야한다 (DP[i] = i개의 카드를 뽑는데 필요한 최대 비용)... silverDPbojDP BOJ 15649 : N과 M (1) - C++ 백트래킹 문제 유형 : 특정 조건을 만족하는 모든 경우의 수를 수행하는 방법 (경우의 수를 진행하다가 막히면 가장 마지막으로 성공한 부분으로 돌아가 다른 경우로 진행하는 것 -> 백트래킹)... silverboj백트래킹boj