묻고 답해요
132만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[파이썬/Python] 문과생도 이해하는 DFS 알고리즘! - 입문편
그래프 초기화
안녕하세요. 선생님 덕분에 멋진 강의를 듣고 있는 학생입니다.이제 유형 1을 다 수강했는데, graph를 초기화할 때 보통 N의 개수가 적으면 불리언 2차원 배열로 선언하고, N의 개수가 많으면 빈리스트로 구성된 2차원 리스트로 선언하는데요.그냥 모든 문제에 빈리스트로 구성된 2차원 배열을 선언하지 않는 이유가 N의 개수가 적으면 배열로 선언하고 조회하는 게 더 빠르기 때문인지 여쭤봐도 될까요?
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
투포인터 #22988 문제 답안에서 빠진 게 있네요
투포인터 s == e 일 경우에 remain 을 1 추가 한다음에는 break 해서 while 문을 벗어나게 해주셔야 합니다. 안 그럼 그 다음 if 문에서 cnt 가 하나 추가되어 버립니다
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수론 #15736 질문입니다.
n = int(input()) answer = 0 for i in range(n+1): if i**2 > n: break else: answer = i print(answer)이렇게 풀었는데, 백준에서 틀렸습니다.. 왜 틀렸을까요??
-
해결됨코딩테스트 [ ALL IN ONE ]
메모리 주소의 길이
연결리스트 (Linked List) - 1 강의 보면서 같이 디버깅해보는 중인데요강사님 화면에는 메모리 주소가 11자리로 나오는데저는 메모리 주소가 훨씬 길게 표시됩니다.이건 왜 그런 건가요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
안녕하세요 11724번 질문드려요!
안녕하세요! 강의 수강 중 질문이 있어 질문 드립니다.현재 이런식으로 코드를 작성했고, 백준 스타일에 맞춰 제출을 했는데 오답처리가 되었습니다. 디버깅 시에도 1번예제6 5 1 2 2 5 5 1 3 4 4 6이걸 입력했을 때 2가 나오는 것이 아닌 dfs를 호출시 if절에서 전부 vistied[i] 부분이 false처리가 되어서 입력한 크기인 6이 answer로 계속 출력되고 있습니다.어느 부분이 문제여서 계속 찾고 있지만 발견하지 못하여 질문드립니다.package algorithmstudy.dfs; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class boj11724 { final static int MAX = 1000 + 10; static boolean[][] graph; static boolean[] visited; static int N, M; static int answer; static void dfs(int idx) { visited[idx] = true; for (int i = 1; i <= N; i++) { if (!visited[idx] && graph[idx][i]) { dfs(i); } } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); // 1. graph에 연결 정보 채우기 graph = new boolean[MAX][MAX]; visited = new boolean[MAX]; for (int i = 0; i < M; i++) { st = new StringTokenizer(br.readLine()); int u = Integer.parseInt(st.nextToken()); int v = Integer.parseInt(st.nextToken()); graph[u][v] = true; graph[v][u] = true; } for (int i = 1; i <= N; i++) { if (!visited[i]) { answer++; dfs(i); } } bw.write(String.valueOf(answer)); br.close(); bw.close(); } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
(해결)정수론 #1978 자바코드로는 통과, 파이선으로는 통과가 안돼요...
+) 자바코드로는 통과했습니다. 파이썬코드로는 왜 통과를 못하는 걸까요?ㅠㅠ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)
-
해결됨코딩테스트 [ ALL IN ONE ]
백트래킹
안녕하세요!백트래킹 강의들은 언제 업로드가 완료되나요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
1090완전탐색
해당 문제에 대해 몇번을 다시 읽고 있는데 왜 출력값이 예제와 같이 나오는지 이해가 안됩니다. '첫째 줄에 수 N개를 출력한다. k번째 수는 적어도 k개의 체커가 같은 칸에 모이도록 체커를 이동해야 하는 최소 횟수이다.'여기서 k는 무엇을 얘기하는 건가요?저는 4명의 친구들이 만날때 4명의 이동거리가 가장 짧은 좌표에서의 각 친구들의 이동거리를 순차적으로 나타내는 거 라고 생각하고 문제를 풀려고 했는데 그럼 주어진 출력예시와 맞지가 않습니다...
-
해결됨코딩테스트 [ ALL IN ONE ]
전자책 교재
교재 전자책을 어떻게 받을수 있나요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
이분탐색 강의 13분 20초 (나무자르기 문제 마지막 print값이 e인 이유)
제목그대로 나무자르기 문제에서 마지막 return이 e가 되어야하는 이유가 좀 와닿지 않습니다.코드에서 잘라서 얻은 나무가 m보다 크거나 같을 경우, s를 mid + 1로 하기 때문에 이는 "절단기 설정 높이를 높이는 행위"이고, 문제에서 요구하는 것이 "절단기에 설정할 수 있는 높이의 최댓값" 이기 때문에 마지막에는 s를 print해야하는 것 아닌가? 싶어서 헷갈리는 것 같습니다.그리고 문제마다 e를 return하는 경우와 s를 return해야하는 경우가 나뉘는건지 좀 헷갈립니다.
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
출력할 때 BufferedWriter? StringBuilder?
안녕하세요 강사님 좋은 강의 감사합니다:)다름이 아니라, 출력문을 사용할 때 BufferedReader와 StringBuilder를 사용하는게 일반적으로 사용하는게 좋다고 알고있는데 해당 강의에서는 BufferedWriter를 사용하신 이유가 궁금해서 글을 작성하게 되었습니다. 감사합니다!
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
정수론 14252
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: 이렇게 되어야 하는 게 아닌가요이 부분이 이해가 안되네요ㅠㅠㅠ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2주 뒤 코딩테스트 저 준비할 수 있을까요?
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다.솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함)남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다.현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다.어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈)1->92->8..9->10->0a->z..A->B..예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기알고리즘 2번. 대리출석한 사람 수 (실버3)[1,2][1,2][1,2] =>2본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1)정사각형 형태의 데이터를 주고자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고그 안에 알파벳 개수 제한 둔 것이 가능한지
-
해결됨코딩테스트 [ ALL IN ONE ]
이런 질문 드려서 죄송합니다.
결국 미루고 미루다 코딩테스트 예정 일자가 11.26 (토) 2주가 채 남지 않았습니다. 솔직하게 현재 파이썬 기초 문법, 기초적인 수식과 함수 구현만 할 수 있습니다. (반복문 포함) 남은 시간이 적지만, 그래도 전략적으로 준비해보고 싶습니다. 알고리즘은 체감으로 백준 가장 기초 브론즈 1문제, 실버 2문제 정도라고 합니다. 현실적으로 알고리즘 1문제 SQL 1문제 솔 목표를 두고 있습니다. 어떤 걸 집중적으로 공부하는 게 좋을까요? 아래는 작년 유형 및 난이도입니다. 알고리즘 1번. 문자 치환 (가장 기초 브론즈)1->92->8..9->10->0a->z..A->B..예시로 123abcABC => 987zyxBCD 이렇게 변환하는 함수 만들기알고리즘 2번. 대리출석한 사람 수 (실버3)[1,2][1,2][1,2] =>2본인 제외 대출이라고 처리 알고리즘 3번. 분할과 정복 (실버1)정사각형 형태의 데이터를 주고자를 수 있는거 다 잘라서 그 안에서 또 정사각형을 자르고그 안에 알파벳 개수 제한 둔 것이 가능한지
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수로 문제3번
안녕하세요21분쯤에 176은 16으로 나누어 떨어지는건 이해했습니다.그런데 n의 제곱수로 나누어지는 약수를 찾아 모두더하라는 의미가176의 약수중에서 2의 제곱수로 나누어지는 애들을 찾아서 더하라는 이야기인데 176의 약수중 2, 4, 8, 16으로 나누어 떨어지니까 얘들을 더해야 하는 게 아닌가요?계속 생각해봐도 도저히 이해가 안돼서 남깁니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
투포인터의 s, e 포인터 위치 질문
안녕하세요 현재 투포인터 알고리즘 강의를 듣고 궁금한 점이 생겨서 질문을 남깁니다. 투포인터 설명을 듣고 그럼 모든 투포인터 알고리즘 문제에서 "start포인터와 end포인터를 양 끝에 위치시켜놓고 시작하는거구나"라고 생각하고 강의에 있지는 않지만 "프로그래머스 - 보석쇼핑" 문제를 풀던 중에 해당 문제는 투포인터 문제임에도 start와 end를 처음 지점부터 동시에 시작하는 방식으로 풀어야만 했습니다. 제가 생각했을 때 start, end를 양 끝점에 두냐, 혹은 시작점에 두개를 모두 위치시키느냐 를 결정짓는 조건이 문제에서 주어지는 값들이 "sort를 하는 것이 의미있냐 없냐"의 여부에 따라 결정된다고 생각했습니다.문제에서 주어진 값들이 sort하는 것이 의미가 있다면: 양 끝점에 위치문제에서 주어진 값들이 sort하는 것이 의미가 없다면: 모든 포인터 시작점에 위치 (sort한 후에)이렇게 생각해도 맞는 것인지 아니면 그냥 문제를 보고 이를 판단해야 하는 것인지 궁금합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
헤드노드 정의
헤드노드 정의 할 때 pNext값에 NULL이라고 적지 않아도자동으로 NULL로 초기화가 되는 건가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
최종 진도
안녕하세요, 혹시 최종 진도가 [섹션 9. [심화] Backtracking]까지 일까요? 아니면 다른 부분도 추가로 업데이트가 될까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
정수론 강의 관련 질문입니다.
정수론의 22분 경의 문제가 이해가 안되어서 질문드립니다. 176~177 사이라는 조건에서는 176은 16으로 완전히 나누어떨어져서 16 + 소수(1) = 17은 이해했는데,22분~ 즈음에 4같은 경우에는 2가 두번이라 4라는 뜻이 이해가 안됩니다. 176과 같은 논리면 4는 2로 나누어떨어지니 2가 나와야 되는거 아닌가 생각이 들어 질문드립니다. 위의 연장선으로 27분 즈음에 2^0 은 1 이니 82로 나누어지는 숫자들의 수 만큼 + 1*(8/2)4로 나누어떨어지는 숫자들의 수 만큼 + 2*2여기까지는 이해8로 나누어떨어지는 숫자들의 수만큼은 + 4*1여기서는 4*1 이 아니라 3*1 이 아닌지1,2,4,8 이 약수가 되는데 1은 이미 처리 했으니 1은 제외해서 3 * 1 더해져야될 것 같은데 ㅠ 수학을 못해서 좀 어렵네요 답변주시면 감사하겠습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
섹션4 범위검색 강의 질문있어요.
올려주신 자료 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])로 해야하나요?