+) 자바코드로는 통과했습니다. 파이썬코드로는 왜 통과를 못하는 걸까요?ㅠㅠ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int N = s.nextInt(); int [] num = new int[N]; int cnt = 0; for(int i = 0; i<N; i++){ num[i] = s.nextInt(); if(num[i] == 1) continue; int j; for( j= 1; j<(int)Math.sqrt(num[i])+1; j++){ if((num[i] % j == 0) & (j != 1)) break; } if(j == (int)Math.sqrt(num[i])+1) cnt += 1; } System.out.println(cnt); } } 파이선은 백준에 제출했는데 틀렸다고 나옵니다... 제 알고리즘에 문제를 찾아주실 수 있나요?ㅠㅠ import math #약수 빠르게 구하기(n의 제곱근까지만 구하기) #1978 N = int(input()) num = list(map(int, input().split())) cnt = 0 for i in range(len(num)): if num[i] == 1: continue for j in range(1, int(math.sqrt(num[i])+1)): if ((num[i] % j == 0) & (j != 1)): break if (j*j != num[i]) & (j == int(math.sqrt(num[i]))): cnt += 1 print(cnt)
해당 문제에 대해 몇번을 다시 읽고 있는데 왜 출력값이 예제와 같이 나오는지 이해가 안됩니다. '첫째 줄에 수 N개를 출력한다. k번째 수는 적어도 k개의 체커가 같은 칸에 모이도록 체커를 이동해야 하는 최소 횟수이다.' 여기서 k는 무엇을 얘기하는 건가요? 저는 4명의 친구들이 만날때 4명의 이동거리가 가장 짧은 좌표에서의 각 친구들의 이동거리를 순차적으로 나타내는 거 라고 생각하고 문제를 풀려고 했는데 그럼 주어진 출력예시와 맞지가 않습니다...
제목그대로 나무자르기 문제에서 마지막 return이 e가 되어야하는 이유가 좀 와닿지 않습니다. 코드에서 잘라서 얻은 나무가 m보다 크거나 같을 경우, s를 mid + 1로 하기 때문에 이는 "절단기 설정 높이를 높이는 행위"이고, 문제에서 요구하는 것이 "절단기에 설정할 수 있는 높이의 최댓값 " 이기 때문에 마지막에는 s를 print해야하는 것 아닌가? 싶어서 헷갈리는 것 같습니다. 그리고 문제마다 e를 return하는 경우와 s를 return해야하는 경우가 나뉘는건지 좀 헷갈립니다.
안녕하세요 강사님 좋은 강의 감사합니다:) 다름이 아니라, 출력문을 사용할 때 BufferedReader와 StringBuilder를 사용하는게 일반적으로 사용하는게 좋다고 알고있는데 해당 강의에서는 BufferedWriter를 사용하신 이유가 궁금해서 글을 작성하게 되었습니다. 감사합니다!
53분 38초쯤에 for j in range(2184, 2200): if gcd(42, i) == 1: if gcd(2184, i) == 1: count +=1 break if j == 2199: count += 2 이 부분에서 이미 for i in range를 통해서 42부터 2184까지 검증을 하고 넘어가서 j로 2184부터 2200사이에 몇 개의 수를 넣어야 공약수를 넣어야 1이 되는가인데 for j in range 안에 조건이 gcd(42,i) == 1인데 이게 gcd(2184, j) == 1: 이렇게 되어야 하는 게 아닌가요 이 부분이 이해가 안되네요ㅠㅠㅠ
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈) 1->9 2->8 . . 9->1 0->0 a->z . . A->B . . 예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기 알고리즘 2번. 대리출석한 사람 수 (실버3) [1,2][1,2][1,2] =>2 본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1) 정사각형 형태의 데이터를 주고 자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고 그 안에 알파벳 개수 제한 둔 것이 가능한지
안녕하세요 21분쯤에 176은 16으로 나누어 떨어지는건 이해했습니다. 그런데 n의 제곱수로 나누어지는 약수를 찾아 모두 더하라는 의미가 176의 약수중에서 2의 제곱수로 나누어지는 애들을 찾아서 더하라는 이야기인데 176의 약수중 2, 4, 8, 16으로 나누어 떨어지니까 얘들을 더해야 하는 게 아닌가요? 계속 생각해봐도 도저히 이해가 안돼서 남깁니다.
안녕하세요 현재 투포인터 알고리즘 강의를 듣고 궁금한 점이 생겨서 질문을 남깁니다. 투포인터 설명을 듣고 그럼 모든 투포인터 알고리즘 문제에서 "start포인터와 end포인터를 양 끝에 위치시켜놓고 시작하는거구나"라고 생각하고 강의에 있지는 않지만 "프로그래머스 - 보석쇼핑" 문제를 풀던 중에 해당 문제는 투포인터 문제임에도 start와 end를 처음 지점부터 동시에 시작하는 방식으로 풀어야만 했습니다. 제가 생각했을 때 start, end를 양 끝점에 두냐, 혹은 시작점에 두개를 모두 위치시키느냐 를 결정짓는 조건이 문제에서 주어지는 값들이 "sort를 하는 것이 의미있냐 없냐"의 여부에 따라 결정된다고 생각했습니다. 문제에서 주어진 값들이 sort하는 것이 의미가 있다면: 양 끝점에 위치 문제에서 주어진 값들이 sort하는 것이 의미가 없다면: 모든 포인터 시작점에 위치 (sort한 후에) 이렇게 생각해도 맞는 것인지 아니면 그냥 문제를 보고 이를 판단해야 하는 것인지 궁금합니다.
정수론의 22분 경의 문제가 이해가 안되어서 질문드립니다. 176~177 사이라는 조건에서는 176은 16으로 완전히 나누어떨어져서 16 + 소수(1) = 17은 이해했는데, 22분~ 즈음에 4같은 경우에는 2가 두번이라 4라는 뜻이 이해가 안됩니다. 176과 같은 논리면 4는 2로 나누어떨어지니 2가 나와야 되는거 아닌가 생각이 들어 질문드립니다. 위의 연장선으로 27분 즈음에 2^0 은 1 이니 8 2로 나누어지는 숫자들의 수 만큼 + 1*(8/2) 4로 나누어떨어지는 숫자들의 수 만큼 + 2*2 여기까지는 이해 8로 나누어떨어지는 숫자들의 수만큼은 + 4*1 여기서는 4*1 이 아니라 3*1 이 아닌지 1,2,4,8 이 약수가 되는데 1은 이미 처리 했으니 1은 제외해서 3 * 1 더해져야될 것 같은데 ㅠ 수학을 못해서 좀 어렵네요 답변주시면 감사하겠습니다.
올려주신 자료 04_RangeSearch02에서 void SearchByAge(void) 함수 마지막 부분 질문있습니다. SearchByAgeRange함수에서 동적할당한 주소를 리턴하고 void **pResult로 받았습니다. void** pResult = SearchByAgeRange(min, max, &cnt); USERDATA* pTmp = NULL; for (int i = 0; i < cnt; ++i) { pTmp = (USERDATA*)pResult[i]; printf("%d, %s, %s\n", pTmp->age, pTmp->name, pTmp->phone); } free(pResult); <----요부분입니다. 이제 해제를 해줘야 하는데요 free(pResult)를 한 번에 해도 괜찮은건가요? 아니면 for문 돌릴 때 free(pResult[i])로 해야하나요?
from collections import deque def levelorder(root): if root is None: return visited = [] q = deque() q.append(root) while q: cur_node = q.popleft() visited.append(cur_node.val) if cur_node.left: q.append(cur_node.left) if cur_node.right: q.append(cur_node.right) return visited levelorder 코드는 위와 같은데요. 여기서 q.append(root) 를 bfs 코드와 같이 사전에 queue = deque(root) 로 미리 넣어줘도 되지 않나요? 이렇게하면 오히려 q.append(root) 를 하는데 걸리는 런타임을 더 줄일 수 있을 것 같아서요
안녕하세요 자바로 강의 듣고 있는 학생입니다. 강의를 들었을 때 이해한 바로는 x,y 따로 계산해서 더해 최솟값을 구한다. 받은 좌표의 겹치는 부분 그러니까 예제로 보았을 때 x: 14~16 y:14~16의 로 모이는 모든 경우를 찾는다 k번째에 k명이 모이는 최소 이동 횟수를 구하면 되니까 확인한 좌표에서 가까운 k개를 구하면 된다 이렇게 이해하고 구현하면 될까요? 그리고 하루정도 고민한다 해도 해결되지 않는다면 다른사람의 답, 풀이를 확인해봐도 될까요? 아니면 계속해서 시도하는게 좋을까요?
강사님께서는 어짜피 둘다 모든 노드를 순회해야 하기 때문에 최악의 경우에도 시간복잡도가 O(N)이라고 하셨습니다. 그런데 아래와 같이 leetcode에 제출한 결과 런타임이 다르게 나와서 의문이 들었습니다. 위가 postorder고, 아래가 levelorder인데 왜 levelorder가 더 빠른건가요?? 아니면 시간복잡도는 대략적으로 계산한 결과이기 때문에 실제 런타임을 돌린 결과에서는 상수값의 차이가 나서 저런 결과가 나온건가요??