일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 조합론
- 알고리즘
- 이분 탐색
- 우선 순위 큐
- dfs
- 2023
- 가끔은_말로
- BFS
- object detection
- 플로이드 와샬
- 너비 우선 탐색
- 세그먼트 트리
- 가끔은 말로
- NEXT
- back propagation
- 크루스칼
- lazy propagation
- 백트래킹
- Overfitting
- 문자열
- DP
- 자바스크립트
- c++
- tensorflow
- 다익스트라
- 회고록
- dropout
- 미래는_현재와_과거로
- pytorch
- 분할 정복
- Today
- Total
목록전체 글 (562)
Doby's Lab
이 문제는 논리를 짤 수 없어서 다른 사람들의 답을 참고했다. 그래도 이분 탐색을 사용해서 풀어보고자 했던 마음이 있었기에 논리만 참고했다. 논리는 이랬다. 어떠한 거리가 주어지면 '그 거리와 같거나 그 이상의 거리를 가질 때'의 공유기가 설치될 수 있는 개수가 주어진 C보다 많으면 거리를 더 늘려서 탐색해나가고, 그와 반대로 어떠한 거리가 공유기가 설치될 수 있는 개수보다 작으면 거리를 좁혀서 탐색해나가는 논리였다. 논리를 알기 전까지는 어디에 포커스를 두어야 할지도 몰랐다. 구하는 것이 거리이기에 거리에 초점을 두어야 했을까 코드 탐색 내가 짠 코드를 토대로 나름의 해설을 해두어야 할 거 같다. #include #include #include using namespace std; int main() ..
이분 탐색 개념을 알고서도 이분 탐색 문제를 보면 '이게 왜 이분 탐색을 써야 되지?'라는 생각에 빠졌었다. 아무래도 '알고리즘 분류'에 들어가서 이분 탐색을 찾아 풀다 보니 '일단 이분 탐색을 써야 해'하는 전제를 두고서 들어갔기 때문에 쉽사리 문제에 접근할 수 없었다. 이분 탐색을 전제에 두지 않았다면 더 쉽게 접근할 수 있었을까 그랬다면 접근 방법은 이랬을 거다. 제일 큰 나무 위에서 한 칸씩 줄여가며 자른 나무 개수 count count가 >= M이 되는 시점에서 자른 높이 측정 생각보다 쉬운 접근이다. 이분 탐색이 필요했던 이유 문제를 보면 한 나무가 가질 수 있는 최대 높이가 1,000,000,000(10억)이라고 한다. 만약에 모든 나무를 끝까지 다 베어야 한다면 count는 10억 이상이 ..
이 문제를 보았을 때, 너무 쉬운 문제인데 CLASS 2에 왜 있을까라는 생각을 했다. 어떤 수 N이 있다고 가정하자. 'N이 카드 패에 있는지 없는지는 그냥 for문 돌려서 확인하면 끝나는 거 아닐까?'라고 생각할 수 있었다. 하지만, 문제에서의 N과 M의 주어진 범위를 보고, 시간제한을 보면 떠올랐던 생각으로 풀었을 때 '시간 초과'라는 오류를 초래할 수 있다. 왜냐하면 N의 범위가 1~500,000 M의 범위가 1~500,000이면 for문을 돌렸을 때 시간 복잡도가 O(N*M) 일 것이고, 최댓값이 250,000,000,000 즉, 2500억을 넘어가기 때문이다. 시간제한은 1초로 약 1억번 안에 끝내라는 암묵적인 조건을 주기 때문에 for문으로는 처리할 수가 없었다. 해결법 어떠한 배열 안에 특..
알고리즘 문제에서 소수에 관한 문제를 보면 1차적으로 에라토스테네스의 체를 떠올리게 된다. 허나, 에라토스테네스의 체를 잘못 알고 있었기 때문에 블로그의 정리를 해두려한다. (이름 외우는게 젤 어려워.. 아리토스테네스 아레스토테네스...) 기존에 잘못 알고있었던 건 어떤 정수 N이 있을 때 2부터 N까지 소수를 구하려면 2부터 N의 제곱근까지 범위를 주면된다. 이까지만 알고 범위 안에서 뭘 하는지 생각하지 않고 있었다. 물론 소수를 구할 때 N의 제곱근까지만 범위를 준다는게 시간을 조금이라도 줄여주는 것은 존재하는 내용이다. 에라토스테네스의 체 2~정수 N까지의 소수를 구한다고 했을 때 에라토스테네스의 체를 몰랐다면 2~N 사이의 값 i를 i 이하 수들로 나누어보며 소수인지 아닌지 판별했을 것이다. 이런..
다음 문제를 풀 때 부호가 나올 수 있는 경우는 구현을 했지만 "NO"가 출력되어야 하는 부분을 처리하지 못했다. 내가 짰던 코드는 다음과 같다. #include #include #include using namespace std; int main() { int n; cin >> n; stack idx; vector sample; vector chart; for (int i = 0; i > a; sample.push_back(a); } int max = sample[0]; for (int i = 1; i max) { while (1) { if (idx.top() == sample[i]) { popNum.push_back(idx.top()); idx.pop(); ..
1. 개발 환경 구축 (VSC) 자바는 IDE(개발 통합 환경)을 뭘로 쓰려나 싶어서 찾아보다가 Visual Studio에서는 자바를 지원하지 않았고, 이클립스라는 IDE나 Visual Studio Code에서 사용할 수 있길래 아무래도 나에게는 VSC는 무언갈 개발하고 만들어낼 수 있다는 인식과 Visual Studio나 이클립스 같은 IDE는 공부를 하기에 좋다는 스스로의 인식이 있고, 자바스크립트를 공부할 때 VSC를 사용했었기 때문에 VSC를 택했다. 하지만, VSC에서 자바 개발 환경을 구축해내는 것은 좀 까다로웠다. JDK(Java Development Kit) 설치, 환경변수 추가, setting.json에서의 설정 등 나 또한 여러 웹 자료들을 보고 따라 했기 때문에 추후에 다룰 일이 생기..
async와 await이란 Promise가 Call-Back을 간결하게 표현할 수 있게 해 줬었다면 async와 await은 보다 간결해진 비동기 처리 Promise를 더 간결하게 처리해주고, 동기적으로 작성한 것처럼 보이게끔 해주는 API이다. 기존의 Promise는 Chaining이 가능하여 코드를 지저분하게 만들 수 있지만 async와 await을 통하여 이를 간결하게 보여준다. async function fetchUser() { // do network request in 10 secs... return 'ellie'; } const user = fetchUser(); console.log(user); 다음 코드의 실행은 user라는 변수에 fetchUser를 할당함으로써 10초가 걸리게 되고, ..
평소 문자열 문제(특히 입력)에 취약하던 입장에서 이 문제로 문자열 입력에 대해 정리를 하려 한다. 처음에는 string 변수를 선언하여 입력 문자들을 집어넣으려 했다. >> 공백 전의 한 단어밖에 담지 못 하기 때문에 pass getline() 그래서 공백을 포함한 모든 문자열을 담을 수 있는 방법이 필요했다. >> getline(입력스트림(입력할 방법(?)), 문자를 담을 곳, 이 문자가 나오면 입력을 끝내겠다는 문자) getline은 에 선언되어있다. ex) #include int main(){ string idx; getline(cin, idx, '\n'); } >> idx라는 string 변수에 cin을 통해 '\n'이 나오기 전까지 입력을 받겠다는 뜻이다. 그밖에도 문자열 입력에 관한 함수들을..