while(lo <= hi){ int mid = (lo + hi) / 2; if(check(mid)){ hi = mid - 1; ret = mid; }else lo = mid + 1; } 여기서 ret을 찾는 과정(ret=mid)이 조건을 만족하는 최소의 ret을 찾는 과정인가요? ret=min(ret,mid) 필요 없나요? 사실 잘 이해가 안되네요ㅠㅠ 6-A 는 ret=min(ret,mid)이런 걸 했는데 여기는 없어서요
안녕하세요, 시간초과가 나서 질문드립니다. http://boj.kr/8e5586c64a774c39bac19c6aa002074f 제 로직은 다음과 같습니다. 2차원 벡터로 사다리를 표현합니다. 다만 각 행열의 값은 0일 경우 이어진 사다리가 없고, 값을 가질 경우 index+1의 value를 가집니다. 즉 (0,0)-(0,1) 사이에 사다리가 있을 경우 (0,0)=2, (0,1)=1을 갖습니다. 뽑을 수 있는 사다리의 조합을 구합니다. 이는 벡터의 현재 값과 다음 값이 모두 0이면 후보군 벡터에 추가합니다. (코드에선 parti입니다.) parti 벡터를 0부터 3까지 조합을 구합니다. 후보군 중 0개, 1개, 2개, 3개 를 뽑는 모든 조합을 구합니다. 조합을 만들 때 연속된 사다리는 피했습니다. 조합이 완성될 경우 check 함수를 호출하여 사다리 타기를 진행합니다. 이런 플로우를 갖고있고, 이렇게 풀 경우 백트래킹도 필요가 없기에 오히려 적은 연산을 할 거라고 생각했습니다. (아니면 비슷하거나) 하지만 시간초과가 발생하기에 질문드립니다. 디버깅을 해보니 조합은 제대로 뽑히고 있습니다. 필요없는 연산은 딱히 없어보이는데 무슨 문제가 있을까요? +) 백트래킹이란 말을 그냥 완전탐색을 진행하되 중간에 답이 나오면 끝내겠다. 혹은 기존의 답보다 깊게 탐색이 진행되는 것을 막겠다. 라는 것으로 이해했는데 이게 맞는건가요? 그렇다면 보통은 다들 그런 식으로 구현할텐데 굳이 백트래킹이란 단어를 쓰는 이유는 뭘까요..? 감사합니다.
선생님 소수와 관련된 문제라 에라토스테네스의 체 알고리즘을 이용하여 배열에 미리 소수에 대한 여부를 파악하여 저장해두었습니다. isPrime 함수는 단순히 해당 배열의 값이 true인지 false인지 리턴을 하는것이라, 함수 자체의 의미가 없어지는거 같은 느낌이 들어서요. 실제 코딩테스트에도 이와같이 작성해도 문제가 없을까요? 아니면 함수의 의미에 맞게 함수 내부적으로 연산을 수행해야 할까요? #include <iostream> bool isPrime(int x); int reverse(int x); // 에라토스테네스의 체 알고리즘 static bool primes[100001]; int main() { int N, numInput; scanf_s("%d", &N); // 모두 true로 초기화 for (int i = 0; i < 100001; ++i) primes[i] = 1; // 0과 1은 소수가 아님 primes[0] = primes[1] = false; // 에라토스테네스의 체 알고리즘을 통해 모든 소수 판별 for (int i = 2; i <= std::sqrt(100001); ++i) { if (!primes[i]) continue; primes[i] = true; for (int j = i * 2; j < 100001; j += i) primes[j] = false; } // 나머지 계산 for (int i = 0; i < N; ++i) { scanf_s("%d", &numInput); int reverseNum = reverse(numInput); if (isPrime(reverseNum)) printf("%d ", reverseNum); } } bool isPrime(int x) { return primes[x]; } int reverse(int x) { int num = 0; while (x > 0) { num = num * 10 + x % 10; x /= 10; } return num; }
교안을 처음부터 보면 기본 사용법이랑 입출력등이랑이 나오는데 강의는 시작부터 재귀함수부분을 들어가고 있는데 알고리즘교안이랑 강의랑 어떻게 사용하면될까요?? 재귀함수를 파트도 교안에서 보이지않는데 일단은 교안을 보면서 따라 사용해보고 그다음에 재귀함수를 듣고 포인터를 강의랑 교안을 같이사용하면서 듣는게 맞는건가요?
http://boj.kr/de8945ab75c34aa8a4034d0ebe22fc4f 문제를 bfs로도 한번 풀어 보았습니다! 예제는 정확하게 정답이 나왔습니다. 전역변수로 선생님과 같은 배열들의 크기를 잡았는데 제출시 메모리초과가 뜨는 이유는 bfs안에 queue를 만들어서 그런것일까요?? 추가로 시간복잡도는 주어진 문제의 변수에 범위를 보고 내가 쓸 로직과 비교하여 이 로직이 될지 안될지 판단이 어느정도 가능해 졌는데, 문제에서 제공한 제한된 공간복잡도를 만족하는지에 대한 판단은 어떻게 해야 될까요?
https://www.acmicpc.net/source/share/36b096b47b1e43518dee34891f9e1897 안녕하세요 큰돌님, 혹시 제 코드도 괜찮은 코드인지 여쭤드립니다, 다름이 아니라, 여기까지 오면서 그동안 visited를 쓸때 2차원 배열로 했었는데, 이번 영상에서는 1차원 배열을 써서, 저는 배운데로 일단 저만의 방식으로 코드를 짜긴했는데, 혹시 효율성이나 1차원 배열로 한 이유를 설명해주시면 감사합니다 ㅎㅎ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제일 메인이 되는 파일에 헤더가드를 넣으면굳이 다른 헤더파일들에 안 넣어도 괜찮다고 생각이 드는데 그렇지 않은 이유가 무엇인가요?