묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-R 질문있습니다 :)
안녕하세요 선생님 🙂너무 좋은 아이디어 제공해주셔서 감사합니다 ^^ 선생님 강의를 보기 전에 먼저 풀어봤는데요, DP방식이 아닌 1차원 배열로 설계했습니다. S = E일 경우에는 숫자가 1개밖에 되지 않기 때문에 팰린드롬Oarr[S]과 arr[E]가 같지 않을 경우에는 팰린드롬X그 외의 경우는 함수처리위와 같이 설계를 하였고, 테스트케이스는 올바르게 출력이 되었습니다. 하지만 틀렸다고 하더라구요 ㅠㅠ 제 아이디어의 어디가 잘못되었는지 알려주시면 정말 감사하겠습니다 ㅎㅎ http://boj.kr/ddee46587ca14173a4cd344a40b25894
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
메모이제이션을 사용한 TSP 문제에서 계산을 생략하는 원리
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.TSP 문제를 동적 계획법(DP)과 메모이제이션으로 풀 때, 이미 방문한 경로의 최적 비용을 어떻게 활용하여 계산을 생략하는지 궁금합니다. 구체적으로는, dp 테이블을 사용해 한 번 계산한 경로에 대한 비용을 저장하고, 이후에 같은 경로를 다시 탐색할 때 그 값을 재사용하여 계산을 건너뛸 수 있는 원리에 대해 설명 부탁드립니다. 제가 이해한 바로는, 미래 경로(마지막 인덱스를 찍고)에 대한 최적 비용이 이미 dp 테이블에 저장되어 있기 때문에, 더 이상 그 경로를 끝까지 가지 않아도 된다는 것입니다. 예를 들어, tsp(2, 7)을 한 번 계산하고 나면, 다시 tsp(2, 7)이 호출될 때 다시 계산하지 않고 dp[2][7]에 저장된 값을 사용하는 방식입니다. (visited 7 에 해당하는 정점을 방문한 here = 2에서부터 시작해서 마지막까지 순회한 최적 비용을 이미알기 때문에) 이렇게 불필요한 계산을 패스함으로써 계산 속도를 크게 향상시킬 수 있다는 개념이 맞나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 질문 있습니다.
이코드에서 우선순위 부분은 교안에서 어디서 볼 수 있을까요?!?!? bool cmp(string a, string b){ if(a.size() == b.size()) return a < b; return a.size() < b.size(); }
-
해결됨코딩테스트 [ ALL IN ONE ]
노션이 뭐죠??
그냥 구글폼에 제 메일주소 eovnfjfpa@naver.com으로 교재 신청했는데 아직 안와서요교재 좀 부탁드릴게요 노션이 뭔지 아무 설명이 없는데 메일로는 강의 교재가 안와서 문의드려요
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
1912번 DP테이블 N에서 끝나는, N까지 살펴 봤을 때 질문입니다.
안녕하세요 강의 듣다가 궁금한 점이 생겨서 질문 드립니다. DP 테이블을 생성할 때, N에서 끝나는, N까지 살펴봤을 때 로 보통 접근한다고 하셨는데, 모든 DP풀이에 해봄직한 생각이라고 보면 될까요? 테이블을 세우는게 뭔가 제 멋대로 세우는 것 같아서 어렵게 느껴지는 것 같습니다.그리고 knapsack 같은 DP세우는게 쉽지 않던데, 어려운 DP문제들은 어떤 부분을 주목해서 DP테이블을 세우려고 집중하면 될까요?풀면서 느끼는 점이 DP식을 잘못 세우면 완탐처럼 세우게 되는 것 같습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-F 시간초과 질문
http://boj.kr/ac47add1518f4832ac613b04e2c041ed 안녕하세요.dp를 구하는 과정에서 같은 시간복잡도인 재귀함수를 사용했는데 시간초과가 바로 나버려서 질문드립니다.for문으로 풀이해주신 부분의 시간복잡도도 O(n)인데 왜 시간초과가 나는지 모르겠습니다 ㅠ.ㅠ
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
숙제 검사
안녕하세요 선생님숙제로 내주신 문제를 풀어보았습니다.좀 무식한 방법으로 한 것 같은데 이것 말고는 다른 방법이 떠오르지가 않더라구요.피드백 부탁드립니다! public class Main { static int[] visited; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int nodeCount = Integer.parseInt(st.nextToken()); // 노드의 수 int lineCount = Integer.parseInt(st.nextToken()); // 간선의 수 List<Integer>[] list = new ArrayList[nodeCount + 1]; for (int i = 1; i <= nodeCount; i++) { list[i] = new ArrayList<>(); } visited = new int[nodeCount + 1]; for (int i = 0; i < lineCount; i++) { st = new StringTokenizer(br.readLine()); int nodeA = Integer.parseInt(st.nextToken()); int nodeB = Integer.parseInt(st.nextToken()); list[nodeA].add(nodeB); } bfs(list, 2); } private static void bfs(List<Integer>[] list, int target) { Queue<List<Integer>> q = new LinkedList<>(); q.offer(list[1]); visited[1] = 1; int level = 1; while (!q.isEmpty()) { boolean isFinished = false; int size = q.size(); loopOut: for (int i = 0; i < size; i++) { List<Integer> currentNodes = q.poll(); for (Integer nextNode : currentNodes) { if (nextNode == target) { System.out.println(target + " : " + level); isFinished = true; visited[nextNode] = 0; break loopOut; } else { List<Integer> e = list[nextNode]; if (!e.isEmpty() && visited[nextNode] == 0) { visited[nextNode] = 1; q.offer(e); } } } } if (!isFinished) { level++; } else { target++; level = 1; q.clear(); q.offer(list[1]); for (int i = 2; i < visited.length; i++) { visited[i] = 0; } visited[1] = 1; } } } }
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
[문제3번] 두수의 합 : O(nlogn)
제가 작성한 코드도 O(nlogn)에 충족하는지 궁금합니다 감사합니다def solution(nums, target): answer = [0]*2 length = len(nums) nums = sorted(nums) left = 0 right = length-1 for i in range(length): if target > (nums[left] + nums[right]): left += 1 if target < (nums[left] + nums[right]): right -= 1 if target == (nums[left] + nums[right]): answer = [nums[left], nums[right]] return answer
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
선생님...대체 뭐떄문에 틀린지 모르겠어요..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님....선생님 해설보기전에 스스로 풀어보고 내려는데 자꾸 12%에서 틀립니다.백준에서 반례도 열심히 넣어봤는데.... 전부 다 제대로 동작합니다 ㅠㅠ제 코드는 아래와 같습니다.IsPossible이라는 함수에서 이게 애초에 팰린드롬이 가능한지 아닌지 검사합니다.main에서는 팰린드롬이라면count배열에 알파벳 갯수를 기록해두고char 벡터에 NULL값 하나를 넣어서 생성해둡니다.받은 문자열의 길이가 홀수라면, 가운데 글자를 미리 삽입해둡니다.짝수라면 NULL양옆으로 알파벳순서대로 삽입합니다.모든 과정을 마친 후 NULL을 삭제합니다.출력합니다.선생님...부탁드립니다..정말 오래고민했어요 ㅠㅠㅠ선생님의 정답을 보기전에 꼭 해결해보고 싶어서, 이렇게 질문드립니다//#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <algorithm> #include <string> #include <cmath> #include <map> using namespace std; bool IsPossible(string s) { int count[26] = { 0 }; int len = s.length(); for (char c : s) { count[c-'A']++; } if (len % 2 == 0) { for (int i : count) if (i % 2 == 1) return false; } else { for (int i = 0; i < 26; ++i) if (count[i]%2 == 1) count[i]--; for (int i : count) if (i % 2 == 1) return false; } return true; } void PrintV(vector<char> c) { for (char i : c) { cout << i; } } int main() { string s; cin >> s; if (IsPossible(s)) { int count[26] = { 0 }; int len = s.length(); for (char c : s) count[c - 'A']++; vector<char> v(1); if (len % 2 == 1) { for (int i = 0; i < 26; ++i) if (count[i]%2 == 1) { count[i]--; v[0] = (char)(i+'A'); break; } } for (int i = 0; i < 26; ++i) { while (count[i] != 0) { if (v.size() % 2 == 1) { v.insert(v.begin() + v.size() / 2, i + 'A'); } else { v.insert(v.begin() + v.size() / 2 + 1, i + 'A'); } count[i]--; } } if(len%2 == 0) v.erase(v.begin() + (v.size() / 2)); PrintV(v); } else cout << "I'm Sorry Hansoo" << "\n"; }
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DP 네트워크 선 자르기 질문 드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 강의 잘 듣고있습니다 감사합니다. 다름이 아니라 DP 강좌 네트워크 선 자르기 12분 부분에서 설명하신 대로면 dy[4]는 3짜리를 자르는 방법에 1 짜리를 자르는 방법 추가하고, 마지막 토막이 2짜리면 앞 부분도 2짜리니까 dy[4] = dy[3] + dy[1] + dy[2] + dy[2] 이렇게 되어야 하는거 아닌가요? 왜 dy[4]= dy[3] + dy[2]인지 잘 이해가 가지 않습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H compSize 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.문제 풀이는 잘 이해가 갔습니다.그래서 손코딩 해보고 코드를 제출했는데 틀렸다고 나오길래 찾아보니깐..제가 compsize[1004]로 해서 틀린 거 였습니다. 수정해서 맞기 했는데.. 1004도 넉넉하다고 생각했는데 제가 잘 못 생각한 걸까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
word |= 가 이해가 안 됩니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.words[i] |= (1 << (str - 'a')); 이 코드 부분이 이해가 안 됩니다. abcabc 라는 문자열을 숫자로 표현하고 싶다는 건 알겠는데.. abcabc가 7인게 이해가 안 됩니다.a(1)b(2)c(4)a(1)b(2)c(4) => 14 아닌가요..? 왜 7인건지..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문 있어요!
http://boj.kr/981e1180bdc04bcc847ce9ae1e0b9c5c강의 듣기 전에 먼저 풀어봤는데 도저히 모르겠는 부분이 있어서 질문 드려요!중간에 반복문을 for(int i = 1 ; i <= N-M; i++)가 아니라for(int i = 0 ; i < N - M + 1; i++)로 했을 때 반복 횟수가 달라서(후자의 반복이 1회 더 많아서) 34%에서 틀렸는데,후자의 반복문이 필요 이상으로 반복을 한다면 f_index가 인덱스 범위를 벗어나서 어떤 테스트 케이스에서든 문제가 생겼어야 할 거 같은데 왜 34%가 되서야 문제가 생겼을까요?컴파일러에서 예외 발생이라도 떠야했을 거 같은데요..답변 감사해요 강의 잘 보고 있어요!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-Q 질문있습니다 :)
안녕하세요 선생님 🙂 어려운 문제는 아니었던거 같지만 모르겠는 부분이 생겨서 질문 드립니다. visual studio에서는 배열의 범위가 초과되었다는 에러가 계속 뜹니다. 선생님 코드와 다른 점이 없는지 여러 번 검증해보았지만 차이가 없어서 백준에 제출해봤는데요, 맞았다고 하더라구요.. arr의 크기를 18이 아닌 20으로 잡아도 동일한 에러가 잡힙니다. 컴파일러에서 왜 에러가 뜨는건지 모르겠습니다.. http://boj.kr/f91936720fc54768adb00def9dc32b35 메모이제이션 범위가 이해되지 않아 다른 숫자들로 넣어봤는데요, 0.0까지는 문제가 없더라구요. 메모이제이션 범위를 -0.5로 두신 이유가 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-F 코드 확인 부탁드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요~ http://boj.kr/e9c207f2a03a40c58f133d577488e3a3 *0 일때 반례 까지 추가 했는데 틀렸다고 나와서 질문 드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-B 풀이 로직 질문
http://boj.kr/80b5da8858994a9a9bca1bfbd7ce56a8 안녕하세요 선생님.DFS로 파이프의 position을 dp로 저장하면서 풀이를 진행했는데 이렇게 접근해도 괜찮은지 여쭤봅니다.감사합니다!
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
set을 활용한 중복제거
안녕하세요 저는 set을 사용해서 중복을 제거하고 sort함수를 활용한 코드를 작성해봤는데 문제의 시간복잡도 조건에 맞는지 궁금합니다 감사합니다def solution(nums): answer = 0 length = len(nums) #사탕의 총 개수 type = sorted(list(set(nums)), reverse=True) if length > len(type): answer = len(type) elif length <= len(type): answer = len(type) // 2 return answer
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요 선생님 격자판 최대합 테스트케이스를 추가해주세요
안녕하세요 강의 잘 듣고있습니다 다름이아니고 격자판 최대합 문제를 푸는 와중에 제가 오른쪽 위에서 왼쪽 아래로 향하는 대각선 코드를 짜지않았음에도 불구하고 정답처리가 되어 질문드립니다 복습하는 와중에 코드를 리뷰하고있는데 제가 오른쪽위에서 왼쪽 아래로 향하는 대각선 코드를 제대로 작성하지 않았음에도 불구하고 정답처리가 되어 말씀드립니다. 혹시 제가 오해하는 부분이 있다면 정말 죄송합니다 확인 부탁드립니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
구조체 선언 위치에 따른 시간초과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 해당 정답 코드를 보며 다시 풀어보고 있는데,구조체를 선언 하는 위치만 아래 코드 처럼 바꾸었는데 시간초과가나네요.. 원인을 모르겠습니다.#include <bits/stdc++.h> #define max_n 100 using namespace std; const int dx[] = {0, 0, 1, -1 }; const int dy[] = {-1, 1, 0, 0 }; int shark[max_n][max_n], R, C, M, ret, temp[max_n][max_n]; struct Shark { int y, x, s, dir, z, death; }a[max_n*max_n];84063864번 소스 코드 (acmicpc.net)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-D 질문 있습니다.
이코드에서 DFS를 재귀적으로 호출하면 cnt 매번 1로 초기화 되서 결국은 1이 출력 되지 않나요??int DFS(int y, int x){ int cnt = 1; visited[y][x] = 1; for(int i=0; i < 4; i++){ int nx = x + dx[i]; int ny = y + dy[i]; if(nx < 0 || ny < 0 || nx >= w || ny >= h || a[ny][nx] == 0) continue; if(visited[ny][nx]) continue; cnt += DFS(ny,nx); } cout << y << " : " << x << " : " << cnt << "\n"; return cnt; }