import sys N, D, K = map(int, input().split()) bits = [2 ** i for i in range(16)] st = [0 for i in range(N)] res = 0 def and_calc(a, b): if a & b == b: return 1 return 0 def DFS(L, S, bit): global res if L == K: temp = 0 for i in range(len(st)): temp += and_calc(bit, st[i]) res = max(temp, res) return for i in range(S, D + 1): DFS(L + 1, i + 1, bit + bits[i]) return for i in range(N): # N input_value = list(map(int, sys.stdin.readline().split())) for bit in range(len(input_value)): if bit == 0: continue st[i] += bits[input_value[bit] - 1] DFS(0, 0, 0) print(res) 영상과 유사하게 구현을 했는데도 시간 초과가 나서요.. 어디가 문제인지 잘 모르겠습니다.. 파이썬이라서 그런건지.. 😢
안녕하세요 큰돌쌤! 문제를 풀다가 막혀서 질문드립니다! http://boj.kr/54155bff977f43b3a75c1a59fc22430d 저는 ‘dp[현재위치][이동시간] = 모금액’ 이렇게 두고 활용했는데 1퍼 진행되고 틀렸습니다. 어떤 부분이 잘못되었는지 가르쳐주실수 있나요?
안녕하세요 선생님, 아래와 같이 http://boj.kr/fb635eced5da4486b8668d07bf1d4370 a[m-i] = 0; <-- 효율성을 위해 이 코드를 넣었는데 틀렸다고 해요 그런데, 위의 코드를 넣지 않고 마지막 ret / 2 를 통해서 잡아주면 맞았다고 하네요.. http://boj.kr/9a9b8fac99914ffdbfe06fcc4d5a8157 그냥 넘어가도 될것 같긴 한데.. 너무 궁금하네요,,, 찾는데 오래걸리고 혹여 바쁘시다면 꼭 봐주시지 않으셔도 괜찮습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/b5a0d399c3344237a51a700bfb633b2a 와 같이 작성을 했는데 다양한 예제들을 넣어도 답이 뜨지만 틀린 이유를 잘 모르겠습니다. 편하실때 반례 한번만 부탁드리겠습니다.
http://boj.kr/d7d5278a96d845ffb969a50d47df2264 안녕하세요 선생님! 테스트 케이스는 모두 통과했지만 2%에서 시간초과가 발생합니다 어떻게 해야 시간초과를 해결할 수 있을지 도움을 주시면 감사할 것 같아요! 물을 녹이기 전에 백조끼리 서로 만날 수 있는지를 check_swan을 통해 확인하고 만나지 못할 경우에 물을 녹이고 나서 ret을 증가시키고 있습니다 선생님께서 말씀하시는 flood fill은 적용하지 않고 일반적인 bfs 방식을 이용해서 풀었습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/f07cde0329cb43428b1b40bb4960eb2f 위와 같이 풀이를 했는데 반례를 도저히 모르겠어서 질문남깁니다.
코드 질문은 아니고 시간 복잡도 관련해서 질문이 있습니다. 처음 문제를 봤을 때, 저도 조합을 떠올려서 이중 for문을 사용하여 문제를 풀어볼까 했었는데, 그러면 코드의 시간 복잡도가 O(n^2)이니까, n = 15000일 경우 연산 횟수가 대략 15,000 * 15,000번 이기 때문에 시간 초과가 날 거라고 생각해서 다른 방법을 계속 생각했는데요... 결국 못 풀어서 문제 해설을 보니 처음 생각했던 그 방법이여서 조금 당황스러웠습니다. O(n^2)정도 시간복잡도를 가진 알고리즘이 떠올랐을 땐, 그냥 시간 초과 신경 안 쓰고 문제 풀이를 이어나가도 되는건가요?
안녕하세요 큰돌님! go 재귀 함수에 대해 이해가 되지 않는 부분이 있습니다. 제가 완탐에 대한 이해가 부족해서 함수 호출에 대한 로직이 이해가 안되는 것 같습니다. 질문 Board d = c; 로 원본과 동일한 보드를 생성하고 d._move()하는 것 까지는 이해를 했습니다. 그런데 그 다음에 왜 d._rotate90();가 아닌 c._rotate90();를 하는지 모르겠습니다. move한 다음 rotate, 또 다시 move한 다음 rotate 과정을 반복하려면 d._rotate90();가 되어야하는 것 아닌가요..? d._move(); go(d, here + 1); c._rotate90(); 이 과정만으로 5번 이동시키는 완탐을 진행할 수 있는지 이해가 안됩니다 ㅜㅜ 혹시 함수 호출이 어떻게 진행되는지 그림으로 설명해주실 수 있나요? 제가 생각한 완탐 방식은 아래와 같습니다. 함수 호출 순서가 go(d, here + 1); c._rotate90(); 인데 그러면 마지막 호출되는 함수가 return 되고 rotate과정이 진행되는게 아닌가요? rotate함수가 언제 실행되는지 잘 모르겠습니다. 제가 생각하는 함수 호출 순서는 아래 그림과 같습니다. 뭔가 그림이 카오스네요.. 큰돌님 코드 void go(Board c, int here){ if(here == 5){ c.get_max(); return; } for(int i = 0; i < 4; i++){ Board d = c; // 동일한 구조체 생성 d._move(); go(d, here + 1); c._rotate90(); } return; }
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
윈도우api 메인 루프 부분에서 프레임 제한을 위해 적은 코드의 원리를 모르겠습니다. uint64 prevTick = 0; uint64 now = ::GetTickCount64(); if(now - prevTick >= 10) // 요부분! { // TODO prevTick = now; } sumTick 을 만들어서 특정 시간이 되면 if 문으로 들어가는 것도 아니고 현재틱-이전틱 이 일정값 이상으로 조건을 걸어주는게 어떻게 프레임을 제한하는지 궁금합니다.
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
안녕하세요 강사님, 스타크래프트나 워크래프트3의 월드맵 에디터와 같은 툴을 개발하여 컨텐츠를 눈으로 보며 개발하고 싶습니다. 이러한 툴들은 기본적으로 Open Save로 개발했던 걸 저장하고 불러올 수 있는데, 이러한 데이터 저장은 어떤 식으로 구현할지 고민이 됩니다. C++ 파일입출력 기능을 쓸지, 아님 특수한 라이브러리를 쓸지... 또한 강사님도 이러한 눈으로 볼 수 있는 툴부터 구현하셨을 것 같은데, 강사님은 어떻게 하셨는지 궁금합니다.
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
포인터에 대한 강의를 듣고 포인터에 대한 공부를 하던 도중 이해가 되지 않는 부분이 있어 질문드립니다. Shape** shapes; shpaes = new Shape* [100]; shapes[0] = new Circle(); // shapes[1] = new Triangle(); shapes[2] = new Triangle(); ... // shapes[1]을 지우고 포인터 shapes[2]번을 shapes[1]번으로 옮길때 저는 현재 힙 영역의 메모리 구조를 이렇게 생각하였고 포인터는 어쩌피 주소를 닮는 공간이니 delete shapes[1];로 도형을 지우고 shapes[1] = shapes[2]로 하고 shapes[2] = nullptr로 하여 이런식으로 진행하면 문제가 없다고 생각했습니다. 그런데 프로그램을 종료할때 delete[] shapes를 진행하는 부분에서 Heap Corruption Detected( 메모리에 대한 잘못된 접근이나 이미 해제한 메모리에 대한 접근 ) 오류가 나오게 됩니다. 그래서 생각되는 문제가 shapes[1] = shapes[2]로 바로 옮기면 되는 것이 아니라 옮기기 전에 shapes[1]에도 shapes[2] 만큼의 크기를 만들어 주고 shapes[1] = shapes[2]로 옮겨야 되는 것인가 라고 생각하여 코드를 shapes[1] = new Circle(); // shapes[2]에 저장된 도형을 만들고 *shapes[1] = * shapes[2] // 값을 복사하고 delete shapes[2]; // shapes[2]를 지우고 shapes[2] = nullptr; // nullptr로 가리키고 있는 곳을 풀어준다. 이렇게 코드를 수정하니 delete[] shapes; Heap Corruption Detected에 대한 메모리 오류가 사라졌습니다. 여기서 드는 궁금한 점이 포인터는 주소를 담는 바구니(8바이트)인데 왜 shapes[1] = shapes[2]로 가르키는 곳만 바꾸는 것으로 Heap Corruption Detected의 오류가 나며 동작이 안되는지 궁금합니다.
안녕하세요 강의 수강 중에 궁금한 점이 있어 문의 남깁니다. 6분 34초를 보면 포인터의 사이즈는 8바이트라고 나오는데, 그 전에 나온 포인터 값을 보면 16진수 12자리 값이어서 6바이트 크기인 것으로 보입니다. 이 부분에서 왜 차이가 발생하는지 궁금합니다. 추가적인 질문이 있습니다. int가 4바이트고 int *가 8바이트면 메모리 효율성에서 매우 비효율 적인 것이 맞나요? 물론 포인터가 매개변수 호출 등에서 장점이 있긴 하지만, 효율성 부분에서 안좋은 것 아닌지 하는 궁금증이 생겨서 여쭤봅니다. 항상 좋은 강의 감사합니다.
typedef long long ll; 이 코드가 있던데요 pdf에는 숫자 11처럼 나와있어서...계속 해보니깐 안됬었는데 영어L로 하니깐 되네요 ㅠㅠ 1.저 코드의 목적은 무엇인가요?? 2.그리고 터미널을 보면 printf("%.6lf\n", a);를 했을때 결과가 숫자가 엄청길게 나오던데 왜그런건가요??..