본문 바로가기

전체

(156)
[백준/C++] 1654번: 랜선자르기 (이분탐색) 앞 문제와 같다. long long 자료형으로 써야 틀렸습니다를 안만난다. #include #include using namespace std; int N, K; long long lan[10001]; bool condition(int mid) { int sum = 0; for (int i = 0; i = K) return true; return false; } int main() { cin >> N >> K; long long left = 1; long long right = 0; for (int i = 0; i > lan[i]; right = max(lan[i], right); } long l..
[백준/C++] 2805번: 나무 자르기 (이분탐색) long long 자료형을 안쓰면 틀린다. #include #include #include using namespace std; const int MAX = 1000000; int N; long long M; //나무 수, 나무 길이 long long tree[MAX]; bool condition(long long height) { // 앞부분에 존재하는지판단 long long sum = 0; for (int i = 0; i height) sum += tree[i] - height; } if (sum >= M) return true; return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0);..
[PyTorch] PyTorch가 제공하는 Learning rate scheduler 정리 (여기 내용을 많이 참고하여 작성하였습니다.) (** learning rate와 lr이라는 용어를 혼용해서 작성하였습니다.) learning rate는 gradient의 보폭을 말한다. learning rate는 성능에 꽤나 영향을 주는 요소(learning rate를 잘못 설정하면 아예 학습이 안되기도 한다.)이기 때문에 learning rate를 어떻게 설정할 지가 중요하다. 아래의 그림이 learning rate 설정에 따라 loss 그래프에서 어떻게 최적의 weight를 찾아나가는 지를 보여준다. 처음부터 끝까지 같은 learning rate를 사용할 수도 있지만, 학습과정에서 learning rate를 조정하는 learning rate scheduler를 사용할 수도 있다. 처음엔 큰 learn..
[백준/C++] 2661번: 좋은수열 (DFS, 백트랙킹) DFS로 완전탐색을 하되 유망하지 않으면 탐색을 포기하는 기법을 백트랙킹이라고 한다. 이 문제도 역시 백트랙킹으로 푸는 문제이다! 1) 출력할 숫자를 어디에 담을 것인가? -> string에 계속 더해가자. 2) 가지치기 조건은? -> 부분수열이 같은지 체크해서 유효한 수일 때만 dfs! ( 반만 체크하면 된다.) **substr(pos, cnt) pos 위치부터 cnt 갯수만큼의 sub-string을 return #include #include using namespace std; int endFlag = 0; int N; bool isValid(string result) { int len = result.size(); int end = len - 1; for (int i = 1; i
백준 2609번: 최대공약수와 최소공배수(유클리디안 호제법) 그냥 유클리디안 호제법을 마음으로 받아들이자. #include #include using namespace std; int gcd(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; } int lcm(int a, int b, int c) { return a * b / c; } int main() { int M, N; cin >> M >> N; int c = gcd(M, N); cout
[백준/C++] 1929번: 소수 구하기 (여러가지 소수 판별법) 제일 큰 수가 1,000,000으로 for문을 돌며 모든 수를 검사하면 시간초과가 난다. 2가지 방법으로 시간을 줄여보자. (+ endl 쓰면 모든 방법에서 시간초과 나니 '\n'로..) 1. 에라토스테네스의 체 방법 2부터 시작해서 해당 수를 제외한 해당 수의 배수들을 제거한다. #include using namespace std; #define size 1000001 int a[size] = { 0,1 }; int main() { int M, N; cin >> M >> N; for (int i = 2; i
[백준/C++] 9095번: 1,2,3 더하기 (DFS/DP) 1) DFS (모든 조합 체크) #include using namespace std; int test_case, N; int cnt = 0; void solve(int sum) { if (sum == N) { cnt++; return; } if (sum > N) return; for (int i = 1; i > test_case; for (int i = 0; i > N; solve(0); cout test_case; for (int i = 0; i > N; cnt = 0; for (int i = 4; i
[백준/C++] 9663번: N-Queen (DFS, 백트랙킹) 1) 기본가정: 같은 행에 Queen을 놓지 않는다. 2) 유망한 노드인지 확인하는 함수 - 같은 열이나 같은 대각선에 놓이는지 확인 -> 해당되면 유망하지 x - 같은 열 체크: col[i] == col[j] - 같은 대각선 체크: abs(col[i]-col[j]) == i-j #include using namespace std; int col[15]; int N; int cnt = 0; bool promising(int i) { for (int j = 0; j < i; j++) { if (col[j] == col[i] || abs(col[i] - col[j]) == (i - j)) return false; } return true; } void dfs(int i) { //i는 놓은 queen의 수이기..