http://boj.kr/ab659fec129e45c7b35407ed7e322f06 안녕하세요 선생님 문제 제출 결과가 시간초과로 나왔는데 , vector의 사용이 문제인지 이중 for문이 문제인지 아니면 다른 어떤 게 문제인지 궁금합니다 그리고 결과가 시간 초과라고 나왔을 경우 어떻게 대처하면 좋을까요? 예를 들어서 다른 자료형을 사용한다던지 아니면 로직을 바꾼다던지.. 제가 왕초보라 어떻게 대처해야 할지 모르겠습니다. ㅜㅜ 저는 위 코드를 다음과 같이 짰습니다. 입력받은 온도 값을 벡터에 저장. 총 n-k+1번 동안 반복해서 연속된 온도k개의 합을 구해 다른 벡터에 저장. 가장 큰 값 출력. 항상 감사합니다!!
public int getMinIndex(int[] fruit) { int min = getMin(fruit); for(int i = 0; i < 3; i++) { if(fruit[i] == min) return i; } return 0; } 아니라 public int getMinIndex(int[] fruit) { int min = getMin(fruit); int i; for(int i = 0; i < 3; i++) { if(fruit[i] == min) return i; } return i; } 해야 되는거 아닌가요? 첫번째 코드처럼 하면 무조건 최솟값인 과일의 인덱스로 0(사과)가 반환되는거 아닌가요?? 첫번째 코드가 맞는 이유는 처음 등장하는 return이 메소드를 종료시키므로 이후의 구문은 실행되지 않기 때문인가요?!
안녕하세요 선생님, 최댓값 초기화에 관한 질문을 드립니다. 다른 문제에서는 long long의 큰 값 초기화를 1e18로 했었는데 이번 문제에서는 1e18 + 4인 이유가 궁금합니다. 더해주는 숫자의 값은 크게 중요하진 않고 +1 ~ +4 모두 값을 보정해준다는 면에서 같은 의미를 가지는 것인가요? 단순히 1e18로 초기화할 경우 미세하게 숫자가 부족하여 틀리는 경우가 있으므로 작은 값을 필수적으로 더해주어야 한다고 이해해도 괜찮을까요?
http://boj.kr/d27f965013354f43a4356d5d2d5baea9 해당 문제를 왜 틀린지 몰라서 헤매다가 배열을 초기화해주니 정답처리 되었습니다. 그런데 배열 초기화를 하지 않았다고 하더라도 출력값은 어짜피 동일한데 왜 이전에는 오답처리가 되었는지 이해가 안되어서 질문 드립니다. 가비지 값때문에 그 값만큼 문자가 출력되어서 틀렸다면 이해가 되는데 출력값은 이전과 동일하게 나옵니다. 이전에 오답이었던 이유가 무엇인가요? 이전 코드는 해당 소스코드에서 a배열을 초기화하지 않았습니다.
안녕하세요 선생님, 강의를 듣던 중 궁금한 점이 생겨 질문을 드립니다. https://www.acmicpc.net/source/share/ac40156090a44a3883d00e1da2250094 답지의 코드에서 ret == INF일 경우 -1을 출력하고 있는데, 유일하게 ret 갱신이 이루어지는 부분은 ret = min(cnt, ret);이기 때문에 ret값이 INF가 되려면 cnt가 INF이거나 그 이상이 되어야 할 것으로 보입니다. 백트래킹을 위해 추가된 코드 if (cnt >= ret) return; 이 있기 때문에 x, y 끝지점에 도달하기 전에 cnt >= ret일 경우 끝지점에서만 일어나는 ret 갱신이 일어나지 않기 때문에 ret는 INF일 수 있겠구나 생각했지만 그럴 경우 cnt >= ret이 되기 위해 cnt >= INF인 경우가 생기게 됩니다. cnt >= ret이 아닌 이상 언젠가는 y == len에 도달하여 ret 갱신이 이루어질 것이고, 최초 dfs 호출 시 cnt를 0으로 주었기 때문에 cnt >= INF가 되기 위해선 실제로 cnt가 한 칸씩 증가할 수밖에 없습니다. 재귀를 통해 cnt를 하나씩 증가시킬 경우 INF에 도달하기까지 매우 많은 시간이 걸릴 텐데 어떻게 시간 초과가 나지 않는 것인지 궁금합니다. 시간 복잡도를 계산해봤을 때 재귀함수의 시간 복잡도는 O(갈래^깊이), 최악의 경우 for문 5번에서 재귀함수가 모두 호출 되므로 갈래 = 5, cnt를 1씩 증가시켜 INF에 도달하려면 깊이는 INF이므로 O(5^INF)라고 생각했는데 시간복잡도를 잘못 계산한 것일지 어떻게 INF일 때 시간 초과가 나지 않는 것인지 질문을 드립니다.
if name == "__main__": start = time.time() n, m = map(int, input().split()) tmp = [0]*(n + m + 1) max = -2147000000 for i in range(1, n + 1): for j in range(1, m + 1): tmp[i + j] += 1 if tmp[i + j] > max: max = tmp[i + j] for idx, x in enumerate(tmp): if x == max: print(idx, end=' ') end = time.time() print() print(end - start, "sec") 이렇게 해서 성공했는데 답보다 실행시간이 늦더라고여 enumerate가 느린건가요? 2중 for문에 if 가 들어가서 느린건가요? for문이 여러개인건 시간하고 크게 관계가 없는건가요?
http://boj.kr/3ab33c32342c4bb69dab00eeab01852a 작성해 본 코드입니다. 혹시 이분탐색 부분인 while(lo<=hi){ mid = (hi+lo)/2; if(check(mid)){ hi = mid - 1; h_max = mid; } ~~ 에서 h_max = mid 부분을 h_max = min(mid, h_max); 로 바꾸게 되면 min을 사용해서 최솟값을 잡을 수 있을 줄 알았지만 "틀렸습니다"가 되어 질문드립니다. ( 예제는 전부 맞다고 나옵니다) 감사합니다.