묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
dfs, bfs 인접리스트
안녕하세요 강사님, 다름이 아니오라그래프 탐색에서 그래프를 표현하는 방법으로 소개해주신 것 중에 인접리스트를 보면딕셔너리로 key(노드) : values(간선)으로 표현하셨는데강의 말고 다른 교재나 설명들을 보면 인접리스트를 표현할 때 딕셔너리로 나와있는 것은 본 적이 없고 강의 중에 풀어주셨던 rooms 예제에 나오는 것처럼인덱스를 노드로 생각해서 [['b', 'c'], ['a', 'c', 'd'] , ['a', 'b'], ['b']] 이렇게 2차원 리스트로 표현하는 것만 나와있는데 어떻게 공부를 하면 되는 것일까요?제가 한 방식을 정해서 체화시키는 것을 좋아해서요ㅠㅠ 자세히 설명해주시면 감사드리겠습니다.또한 visited = []에 방문한 노드를 append로 추가하는 방식과visited = [0] * (노드 번호 + 1, 0번째는 안쓰므로) 이거에서 방문한 노드의 원소 0을 1로 바꾸는 방식의 차이점이 무엇인지 궁금합니다.1로 방문처리 해주는거랑, 방문한 노드를 추가해서 처리해주는 것의 차이가 궁금합니다.유명한 코테 교재들 모두 가지고 있어서 봤는데visited = [0] *(n+1)dfs 함수 내에visited[v] = True 이런식으로 1로 바꿔주면서 방문처리를 하더라고요 append는 안보이는거 같아서 여쭤봅니다! 아래는 제가 위에서 여쭤본 강의와 다른 교재들에서 본 내용인데 교재 모두가 이렇게 구현하고 있어서 여쭤봅니다ㅎㅎ 보편적인걸 원해서요 질문이 길어져서 죄송합니다# DFS 메서드 정의def dfs(graph, v, visited):# 현재 노드를 방문 처리visited[v] = Trueprint(v, end=' ')# 현재 노드와 연결된 다른 노드를 재귀적으로 방문for i in graph[v]:if not visited[i]:dfs(graph, i, visited)# 인접 리스트 방식으로 그래프 표현# 각 노드가 연결된 정보를 표현(2차원 리스트)graph = [ [], [2,3,8], [1,7], [1,4,5], [3,5], [3,4], [7], [2,6,8], [1,7] ]# 각 노드가 방문된 정보를 표현(1차원 리스트)# 기본적으로 모든 값들을 False로 초기화하고, index 0은 사용하지 않는다.visited = [False]*9
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-C 틀린 부분을 모르겠습니다.
http://boj.kr/ab00c6a0aa494a37a90f5ce08cc4b854저는 좀 다르게 배열을 0으로 초기화하면 물에 잠긴 지역은 1로 표시해서 dfs로 0만 방문하도록 했습니다. 그런데 아무리 찾아봐도 틀린 부분을 모르겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 공부 방법
안녕하세요 큰돌님 이제 막 교안을 끝내고 1주차부터 풀어보기 시작하였는데요!풀리지 않는 문제를 고민하는 시간 1~4시간까지라고 설명해주신 유튜브 영상도 보았는데 그럼 먼저 고민하는 시간은 알려주신 대로 하고, 그럼에도 못 푼 문제는 강의를 보면 되나요??그리고 또 스스로 푼 문제는 바로 해설강의로 들어가면 될까요?? 그리고 나서 해설 강의에서 보여주신 여러 방법들을 직접 타이핑 하면서 학습하면 되는 건지 궁금합니다! 🙂 그리고 이미 풀었던 문제에 대한 복습은 어떻게, 어떤 주기로 진행하면 되는지 역시도 궁금합니다!감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 반례 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.선생님 , 코드가 많이 지저분한 코드지만 예제 출력이랑 반례들을 여러가지 해본 결과 잘 출력 되는것 같은데 3%에서 계속 틀렸다고 뜹니다... 어디 부분이 잘못된 건지 알 수 있을까요??http://boj.kr/4530d78bb2464d989fe7a7e5adc42342
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 질문합니다
안녕하세요, 강사님.저는 처음에 아홉 난쟁이의 키 분포를 저장할 수 있는 배열을 선언하고, 해당 키에 해당하는 난쟁이를 배열에 넣고, (전체 합 - 100)에 해당하는 난쟁이 두명을 찾는 방식으로 문제를 해결했습니다. 예제는 맞는데 틀렸다고 뜨는 이유를 모르겠습니다. 감사합니다.http://boj.kr/7e220e252b364c1e8dbf2d7c16a72cd0
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제6번 컴파일에러 질문 드립니다!
안녕하세요!입력에 대한 출력값은 문제의 요구사항에 맞게 나오는데 계속 컴파일 에러가 뜹니다.import java.util.Scanner; public class Main { public String solution(String str){ if (str == null || str.isBlank()){ return str; } StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray()) { if (sb.indexOf(String.valueOf(c)) == -1) { sb.append(c); } } System.out.println("sb :" + sb.toString()); return sb.toString(); } public static void main(String[] arg){ Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.nextLine(); System.out.println(T.solution(str)); } } 어느 부분이 문제가 되는건지 알려주시면 정말 감사하겠습니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
선생님 감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 올해 초 골드 4~5도 못풀던 제가 플레를 스스로 풀었습니다.열심히 계속 진행하겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8-6 순열구하기 이러한 방식으로 풀어도 괜찮을까요?
이전 값을 DFS 매개변수로 넘겨서 이전값이 아니면 더 깊이 들어가는 방식으로 풀이를 혼자 했었습니다. 괜찮은 풀이 방법일까요?public class P6_순열 { static int n, m; static int[] arr; public static void DFS(int L, int prev, String answer) { if(L==m){ System.out.println(answer); }else{ for(int i=0; i<n; i++){ if(arr[i]!=prev) DFS(L+1, arr[i], answer+arr[i]+" "); } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); arr=new int[n]; for(int i=0; i<n; i++){ arr[i]=sc.nextInt(); } DFS(0,0,""); } }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
BFS 자료구조
BFS 문제를 PriorityQueue가 아닌 LinkedList로 풀던데 이유가 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 스크립트 관련 질문드립니다
안녕하세요! 감사하게도 제공해주신 강의 스크립트로 필기를 자주하는데요, 1주차 개념 #10. 구현과 문제를 푸는 방법의 기초 강의에 스크립트가 없어서요..ㅜㅜ 제가 알기론 인프런에서 ai로 스크립트를 제공하는 걸로 알고있는데 해당 강의 스크립트는 인프런에다가 요청 드려야할까요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
6강 탑다운 DP - 상담 (#14501) 질문 있습니다!
recur(idx) 함수의 첫 번째 if 문인 if (idx == N - 1) return 0; 에서 0을 리턴하는 이유가 궁금합니다.제가 이해하기론 N - 1은 마지막 일자의 상담이고 마지막 일자의 상담에 걸린 경우 무조건 받는 것이 퇴사 전 돈을 더 많이 받기에 이득이라고 이해를 했는데요. 그렇다면 0을 리턴하는 것이 아닌 그 마지막날 상담에 받는 돈의 값을 리턴하는 게 맞는 게 아닌가 하는 생각이 들었습니다. 또한 idx > N - 1의 경우 dp 에 들어있는 돈의 값에 영향을 주면 안되므로 이 경우에는 if (idx > N - 1) return 0; 이지 않을까 하는 생각도 듭니다. 이런 의문점이 드는게 제가 문제를 잘 이해하지 못하고 접근하고 있는 것 아닌가 싶어서 질문드립니다~ 요즘 쉬운 설명의 강의 너무 잘 듣고 있습니다~ 감사합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-D 질문입니다
http://boj.kr/b9694422323942259c6e0971b71621681987번 문제에서는 시작 지점이 왼쪽 상단으로 고정되어 있는데 만약에 시작 지점이 어디든 될 수 있다면 위의 코드 41번째 줄부터 43번째 줄까지를ffor (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { vis[i][j] = 1; alpha[board[i][j] - 'A'] = 1; solve(i, j, 1); vis[i][j] = 0; alpha[board[i][j] - 'A'] = 0; } }위의 코드로 바꾸면 알맞은 답이 나오는지 알고 싶습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?
RemoveNode를 직접 먼저 구현한 후 강의를 듣게 되었는데요,저는 RemoveNode 안에 Search하는 코드를 통합해서 짰는데 SearchToRemove가 RemoveNode를 실행시키기 위해서만 필요하다면 굳이 분리를 해야 할까 하는 의문이 들었습니다.하나의 함수는 하나의 동작만 실행해야 해서 분리가 된 것일까요? 아니면 SearchToRemove가 나중에도 사용이 될 가능성이 있어서 분리된 것일까요?제가 작성한 코드를 첨부합니다. void RemoveNode(const char* pszName) { USERDATA* pTmp = g_pHeadNode; USERDATA* previousNode = NULL; bool isFound = false; // 노드 찾기 while (pTmp != NULL) { if (strcmp(pTmp->name, pszName) == 0) { isFound = true; break; } previousNode = pTmp; pTmp = pTmp->pNext; } // 노드 찾기 실패 if (isFound == false) { printf("\"%s\" : Not Found, remove failed.\n", pszName); return; } // 헤드인 경우 if (g_pHeadNode == pTmp) { g_pHeadNode = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed.\n", pszName); return; } // 헤드가 아닌경우 previousNode->pNext = pTmp->pNext; free(pTmp); printf("\"%s\" : Found, remove successed\n", pszName); }
-
해결됨코딩테스트 [ ALL IN ONE ]
동적계획법 (3) 문제로 배우는 DP
탑다운 방식인데 위에 그림처럼 바텀업처럼 문제를 아래서 부터 해결해 나가서요.강의에서는 피보나치가 탑다운 방식으로 푸는 경우가 있는데 바텀업 방식처럼 문제를 아래서(위에 그림 빨간색표시처럼) 부터 해결한다고 하셨는데요. 혹시 계단 문제도 피보나치처럼 탑다운 방식인데 문제를 아래서 부터 해결해나가는 스타일인건가요?문제를 읽고 탑다운으로 풀지 바텀업으로 풀지 어떻게 알아요?
-
미해결코딩테스트 [ ALL IN ONE ]
ㅇ
탑다운 방식인데
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
소수점
만약 소수점 #자리까지 표현해야 하는 문제는그냥 printf 쓰는게 낫나요?아니면 cin함수를 유지하되 precision 같은 함수를 쓰는게 낫나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-O 관련 질문이 있습니다.
안녕하세요 큰돌님!정확히는 6-O에 국한된 질문은 아니지만6-O 2565 전기줄 문제 풀다가어떻게 풀지 감이 잘 안잡혀서 영상보고내가 직관력이 부족한건가 싶어서 여쭙습니다.이번 6주차, 이분 탐색과 LIS를 하면서이분 탐색은 제가 연습량이 부족한거 같아 solved.ac실버 난이도 무지성 박치기 하니깐 이제 감이 좀 잡혔습니다.다만, LIS 관련 문제는 "최장 증가 수열" 이란 단어가 없으면 LIS를 이용할 생각이 전혀 안나요.6-O 강의를 보면서 정말 깜짝 놀랐습니다. 어떻게 LIS를 이용해서 푸실 생각을 하신건지...실제로 문제중에 "최장 증가 수열"이란 단어가 없음에도 LIS를 이용해 풀이가 가능한 문제들이 많은가요?
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
투포인터 3번(#16472) 조건문 순서 질문드립니다!!
안녕하세요, 선생님. 매일매일 강의 잘 듣고 있습니다!오늘은 투포인터를 공부하다 제가 작성한 코드와 제공해주신 정답 코드의 조건문을 확인하는 순서에 차이가 있어서 질문드립니다. 해당 문제를 풀 때 while 문 안의 아래 2가지 조건을 확인하는데요, 조건 1 if arr[e] in letter:조건 2 if len(letter) < N:제가 풀어봤을 때 저는 조건1 > 조건 2를 확인하도록 구현을 했는데정답 코드는 조건2 > 조건 1를 확인하더라구요. 물론 저는 실제 정답인 4와는 달리 답이 5가 나와서 코드가 어디에선가 잘못되긴 한 것 같은데틀린 이유가 조건문에 순서와 상관없이 제가 단순히 잘못 구현한 것인지아니면 반드시 조건문을 조건2>조건1의 순서로 확인해야되는 문제인지 판단이 서지 않아 질문드립니다! 그리고 앞으로 다른 문제를 풀 때도 어떤 조건을 먼저 확인해야 되는 것인지 어떻게 판단하면 좋을지 판단 기준이 있는지도 궁금합니다 ^^#[나의 코드] N = int(input()) arr = list(input()) s = 0 e = 0 letter = [] letter.append(arr[s]) ans = 0 while s < len(arr) and e < len(arr): ans = max(ans, e-s+1) if arr[e] in letter: ####### 조건 1 e += 1 else: if len(letter) < N: ####### 조건 2 letter.append(arr[e]) e += 1 else: s += 1 e = s letter = [arr[s]] print(ans)#[정답 코드] n = int(input()) arr = list(input()) arr.pop() #inch-worm s = 0 e = 0 letters = [] letters.append(arr[s]) dist = 0 start_flag = -1 while s < len(arr) and e < len(arr): # print(s,e,letters) dist = max(dist, e-s+1) if len(letters) <= n: ########조건 2 e += 1 if e < len(arr) and arr[e] not in letters: #######조건 1 letters.append(arr[e]) if len(letters) > n : s = s+1 e = s letters = [arr[s]] print(dist)
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 프로젝트 문의
안녕하세요. 선생님! 소스 보다가 하나 발견한 부분 공유드립니다.프로젝트이름: 05_adtFileIO소스파일: singleList.c함수명: SearchListByName Q. 해당 함수는 Key값으로 조회하여 데이터를 로드하는 함수입니다.현재는 파일에서 매번 로드하도록 되어있는데캐싱된 데이터(pDataCache)가 있다면, 파일에서 읽어올 필요가 없을것 같아 문의드립니다.추가로 테스트 해보니Search(Kim) > Edit 0 > 수정완료 > Commit X > Search(Kim) 를 하면Edit에서 수정했던 데이터가 없어지는 현상이 있습니다.이미지의 흰 네모안의 로직(주석포함)은 추가해본 부분 입니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS 당근마켓 방문 겸 가중치 처리 질문입니다.
visited[nextY][nextX] = visited[nowY][nowX] + 1;로 방문 겸 가중치를 처리해주는데 가중치가 업데이트가 되지 않습니다. (모든 visited 배열이 1로 표시됨)혹시 이유가 있을까요 ㅜㅜ붙잡고 있어도 어디가 문제인지 잘 모르겠네요.http://boj.kr/fc00f1fba57c469881ce2b1aff27fc66 +) 탐색은 잘 진행됩니다.visited 배열 출력 첨부하니 참고해주시면 감사하겠습니다.