자꾸 출력초과가 나요.. vscode에서 돌려보면 맞는 출력값이 나오는데 왜 백준에서는 출력초과가 나는지 모르겠어요 ... 강의에 있는 코드 참고해서 한건데 왜 안되는지 모르겠어요 ㅠ........ n = int(input()) jewel = [] for i in range(1,int(n**0.5)+1): if i >2 : if n%i == 0: jewel.append(i) jewel.append(n//i) jewel.sort() print(len(jewel)) print(' '.join(map(str,jewel)))
for (int i = 2; i <= 10000000; i++) { if (num[i] != 0) { long long temp = num[i]; while ((double)num[i] <= (double)B/(double)temp && (double)num[i] >= (double)A / (double)temp) { count++; temp = temp * num[i]; } } } 풀이와 다르게 while 문에서 min값까지 판단하게되면 왜 답이 달라지는건지 모르겠습니다. 어떤 값을 count 못하게 되는건지 모르겠습니다
교재에서는 bfs로 구현했는데 저는 dfs로 구현해봤습니다. 그랬더니 시간초과가 발생했네요. 제가 작성한 코드가 올바른답이긴하지만 시간초과가 발생하는건지, 아니면 그냥 틀린건지 궁금합니다. 또한 올바른답 이맞다면 왜 시간초과가 발생하는지(시간복잡도 차이가 왜 크게 나는지)도 궁금합니다. #include <iostream> #include <vector> #include <queue> using namespace std; int maxdepth=-1; vector<vector<int>> a; vector<bool> visited; void dfs(int k, int depth); int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m; cin >> n >> m; a.resize(n + 1); visited = vector<bool>(n + 1, false); for (int i = 0; i < m; i++) { int s,e; cin >> s >> e; a[e].push_back(s); } vector<int> result(n + 1, 0); for (int i = 1; i <= n; i++) { dfs(i, 0); result[i] = maxdepth; maxdepth = -1; fill(visited.begin(), visited.end(), false); } int realmax = -1; for (int i = 1; i <= n; i++) { if (result[i] > realmax)realmax = result[i]; } for (int i = 1; i <= n; i++) { if (realmax==result[i])cout<<i<<' '; } } void dfs(int k, int depth) { if (maxdepth < depth)maxdepth = depth; visited[k] = true; for (int i : a[k]) { if (!visited[i]) { dfs(i, depth + 1); } } visited[k] = false; }
만약 int []A = { 1, 3, 9, 4 } 가 있을때, A={ 1, 3, 9 ,4 } 를 출력하고 싶으면 어떻게 해야 출력할 수 있나요? 혹은 for 중첩문의 반복 조건을 통해 선택정렬을 해서 ( 1, 9) 와 ( 3, 4 ) 에 해당하는 것만 출력하고 싶을때는 어떻게 해야 출력할 수 있나요? 그리고 그건 어디에서 배울 수 있나요?
수업들어보니 자바스크립트의 let 이 자바의 int 같은데, 만약 int min = i ; 선언하고 아래 if ( arr[j] < arr[min]) { min = j ; } 라고 하셨는데, 그러면 변수 min 에는 j 값이 저장 되기는 하지만 int 는 지역 변수라 if 문 안에서 저장된 int min 의 값이 if 문 밖으로 나가서는 for 문을 실행하여 다시 j 가 하나 더해져서 반복 실행 되었을때 min 의 값은 다시 i 로 초기화 되는건가요? 아니면 j 로 바뀐건가요 ? -제가 아는 지역 변수에 대한 설명입니다 지역 변수는 선언된 함수나 메소드 내에서만 접근이 가능하고, 해당 함수나 메소드의 실행이 끝나면 그 범위를 벗어나서 접근할 수 없습니다.
안녕하세요. 덕분에 삽입정렬 마스터했습니다. 또한 다른 쪽 우선 공부해보고 싶은 곳이 있는데, 만약 A=(1, 11, -2, 12, 8, 9)이고 x=10이라면, 알고리즘은 (1, 9) 또는 (-2, 12) 같은 쌍을 찾아내야 할때를 공부하고 싶은데, 어떤 부분을 공부하면 될까요? 기본인지 심화에 있는지도 말씀해주시면 감사드리겠습니다.
안녕하세요! 현재 postorder 트리 문제 풀었는데요! 선생님이 공유해주신 코드가 class Solution(object): def lowestCommonAncestor(self, root, p, q): if root == None: return None left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if root == p or root == q: return root elif left and right: return root return left or right 이렇게 인데 class에 대해서 잘 몰라서 그런지 이후로 어떻게 해야 답이 나오는지 모르겠습니다ㅜㅜ result = Solution([3, 5, 1, 6, 2, 0, 8, None, None, 7, 4], 6, 4) 이렇게 했는데 에러가 나는데 어떻게 해야할까요? ++ 선생님 파이썬 전자책으로 공부하고 했는데, 제가 잘 못찾아서 그런지 그때 클래스에 대해서 보지 못한것 같은데 설명해주셨으면 좋겠어요 🙏 🙏
연결리스트 삭제 시 헤드노드가 NULL인 경우를 고려해야 하는 이유가 궁금합니다. 삭제 전에 삭제할 노드를 미리 찾는 과정이 수반되는데, 그 과정은 헤드노드가 NULL값이 아니라는 것을 전제로 이루어집니다. 따라서 삭제할 노드를 찾아서 삭제를 진행하는 단계까지 왔다는 것은 헤드노드가 NULL이 아니라는 것을 전제로 한다고 볼 수 있습니다. 그럼에도 불구하고 삭제를 진행하는 함수에서 헤드노드가 NULL인 경우를 고려하시고 이에 대한 예외처리 코드를 작성하셨는데, 혹시 그에 대한 이유가 있을까요?
강의 잘들었습니다 😊 😊 강의를 들으면서 한가지 의문이 생겼는데요 쿼드트리나 KD트리를 이용하면 다수의 물체에 대한 충돌체크에 쓰이면 좋을거 같다는 생각을 했습니다. 강의에서는 고정된 물체에 대해서 트리를 구축하고 질의(Query)를 실행하는데요 만약 물체가 움직이게 된다면 위치값이 계속바뀌닌까 이 알고리즘을 사용할수 없을수도 있을거 같았습니다. 움직일때마다 트리를 재구축 해줘야하닌까 더 비효율적이지 않을까요?? 움직이는 다수의 물체에 대해 충돌체크를 하려면 쿼드트리를 사용하고 물체가 이동할때마다 트리 노드가 들고있는 물체 목록을 옮겨 다니는 로직을 만들어야 할까요?
def dijkstra(graph, start, final): # 각 노드들의 비용을 저장 costs = {} # 우선순위 큐 pq = [] # (해당위치까지 가는 총 비용, 노드위치) heapq.heappush(pq, (0, start)) while pq: # heappop을 하면 가장 작은 원소가 튀어 나온다. cur_cost, cur_v = heapq.heappop(pq) # 방문하지 않은 백터 일때만 작동 if cur_v not in costs: # costs[cur_v] = cur_cost for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost heapq.heappush(pq, (next_cost, next_v)) return costs[final] 해당 템플릿 코드중에서 if cur_v not in costs: costs[cur_v] = cur_cost 어떻게 costs에 cur_v가 없다는 것 만으로 바로 최적의 경로라고 확신할 수 있는지 의문이 있습니다. heapq의 성질덕에 cur_cost, cur_v가 '지금까지 heap에 넣은 값들중에' 가장 작은 값 인거는 알겠는데 다른 경로를 통해 뒤늦게 heap에 들어간 값이 이전에 costs에 not in이여서 넣은 값보다 작은 경우도 있지 않나요?? 뭔가 제 생각에 자연스럽지 않아서 다른 코드들을 찾아보니 아래와 같이 제가 생각한 조건대로 대소 비교를 해보고 넣더군요. def dijkstra(graph,start,end): costs = {vertex:111111 for vertex in graph} pq = [] heapq.heappush(pq,(0,start)) while pq: cur_cost, cur_v = heapq.heappop(pq) if costs[cur_v] < cur_cost: continue for cost, next_v in graph[cur_v]: next_cost = cur_cost + cost if next_cost < costs[next_v]: costs[next_v] = next_cost heapq.heappush(pq, (next_cost, next_v)) return costs[end] " '지금까지 heap에 넣은 값들중에' 가장 작은 값 " 이 아니라 앞으로 나올 값 중에 가장 작은 근거가 있을까요?? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
1번 질문: 2번 문제와 백준의 14232번이 어떻게 같은 문제인지 이해가 가지 않습니다. 다음은 강의 자료입니다: 문제 2. 약수 빠르게 구하기 ( #1978, #11653, #14232 ) 숫자 N이 주어진다. 이 숫자의 약수가 총 몇 개가 포함되어 있는지 계산하고 싶다. 약수의 개수와, 약수들을 모두 출력하는 프로그램을 작성하시오. 15 2 3 5 입력값과 출력값을 보면 백준 14232번을 가져오신 것 같은데 약수를 출력하는 문제가 해당 백준의 문제와 어떻게 같은 출력값이 나오는지 이해가 가지 않습니다. 14232번은 다음과 같습니다: 희대의 도둑 효빈이는 세계 최고의 보석가게 영선상에 잠입할 계획이다. 이 영선상은 최고의 보석가게답게 최고의 보안장치를 두고 있는데, 이 보안장치를 해제하지 않는다면 보석을 여러 개 훔쳐갈 시, 보석끼리 달라붙으며 무게가 모든 보석들의 곱으로 늘어난다. 효빈이는 이 보안장치를 해제할 수 없기 때문에, 차라리 곱해진 대로 최대한 많은 보석들을 가져오기로 계획했다. 효빈이는 한번에 k라는 무게를 들 수 있으므로, 딱 k만큼의 무게만큼의 보석을 가져오고 싶은데, 그 때 보석들의 최대 개수를 알고싶다. 영선상에는 세계 최고의 보석가게답게 모든 무게의 보석들이 매우 많이때문에, 훔쳐가는 보석이 부족할 일은 없다. 다만 모든 보석들은 무게가 1보다 크다. 효빈이는 이제 영선상에 잡입할 계획을 다 세웠다. 하지만 무슨 보석들을 훔쳐올지 결정하지 못하였는데, 효빈이를 대신하여 훔쳐올 보석들을 결정해주자. 제가 생각하기로는 한번에 또한 강의자료에 있는 2번 문제의 정답이 해당 문제에 해당하지 않는 것 같은데 이 코드는 어디에 해당하는 코드인지 궁금합니다. 감사합니다
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int A[] = new int[str.length()]; for(int i=0; i<str.length(); i++){ A[i] = Integer.parseInt(str.substring(i, i+1)); } for(int i=0; i<str.length(); i++){ int Max = i; for(int j = i+1; j<str.length(); j++); { if(A[j]>A[Max]) { Max = j; } } if (A[i] < A[Max]){ int temp = A[i]; A[i] = A[Max]; A[Max] = temp; } } for (int i=0; i<str.length(); i++){ System.out.println(A[i]); } } } 안녕하세요 강의 잘 보고 있어요. 강사님이 치라는 대로 코드를 따라 쳤는데 계속 오류가 뜨네요?? (굵게 표시한 부분) cannot find symbol 오류인데.. 분명 j와 max를 잘 정의해 주었는데 왜 이러는 걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강사님 강의 너무 잘 보고 있습니다. 교재 공유 요청 드립니다!