묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다!
#include <bits/stdc++.h> using namespace std; int n,a[52],k,ret; vector<int> adj[52]; bool b[52]; void cut(int node){ b[node] = false; for(int s : adj[node]){ cut(s); } } int main(){ //입력 받기 cin >> n; for(int i = 0; i < n; i++){ cin >> a[i]; if(a[i]!=-1) adj[a[i]].push_back(i); b[i] = true; } cin >> k; // 노드 삭제 cut(k); for(int i = 0; i < n; i++){ if(adj[i].size() == 0 && b[i] == true) ret++; } cout << ret; } //테스트 케이스 통과 but 틀림..제 코드에서 놓친게 무엇일까요..!현재 노드에서 이어진 것이 없고, 잘리지 않았다면 리프노드로 판단해서 수를 카운트 해주었는데 오답입니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문있습니다!
#include <bits/stdc++.h> using namespace std; int main(){ string s; while(true){ getline(cin, s); if (s == ".") break; stack<char> stk = {}; for (char c : s) { if (c == ')' && stk.size() && stk.top() == '(') { stk.pop(); } else if (c == ']' && stk.size() && stk.top() == '[') { stk.pop(); } else if (c == '(' || c == '[') { stk.push(c); } else { continue; } } if (stk.empty()) { cout << "yes" << '\n'; } else { cout << "no" << '\n'; } } } 이 코드가 틀린 이유가 뭘까요..ㅠ 도저히 모르겠네요.그리고, 정답 풀이에서 check bool 변수가 하는 역할이 무엇일까요? 제 코드와의 차이가 check 플래그 변수가 없다는 것이 가장 큰 차이인 거 같은데 왜인지 모르겠습니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-L 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님의 소스코드를 보면 int changeToInt(string a){ return atoi(a.substr(0, 2).c_str()) * 60 + atoi(a.substr(3, 2).c_str());}이렇게 되어 있는데 stoi()함수를 쓰면 c_str()을 안써도 되는 것으로 알고 있는데 atoi를 사용하는 이유가 있을까요??아니면 제가 잘못 알고 있는 걸까요...
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-L 질문있습니다.
안녕하세요 강사님, 강의 잘 듣고 있습니다.강사님의 코드를 보면서 궁금한 점이 있습니다.강사님 코드에 아래의 두 케이스를 대입했습니다. 490.10.10.1 40.10.10.19문제에서는 '한 개 이상의 연속된 수의 곱' 이니 위와 아래 케이스 다 9가 나와야 하는 것 같은데, 케이스 1은 0.9가 나오고 케이스 2는 9가 나왔습니다. 제가 문제를 잘못 이해한 것인가요?#include <bits/stdc++.h> using namespace std; int n; double psum[10001], a[10001], ret, b; // a[i] > b*a[i] 일 경우, 이전까지의 곱 b를 버리고 a[i]에서 곱셈을 시작한다. int main(){ cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; double b = a[0]; for(int i = 1; i < n; i++){ cout<<"a["<<i<<"] = "<<a[i]<<" b = "<<b*a[i]<<"\n"; if(a[i] > b * a[i])b = a[i]; else b *= a[i]; ret = max(b, ret); } ret = round(ret*1000)/1000; printf("%.3lf", ret); return 0; }
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
자료 자체와 정렬된 인덱스 분리 (인덱스 정렬) - 인덱스 범위 코드에 버그가 있어서 질문 드립니다.
강사님 다름이 아니라 인덱스 검색의 SearchByIndexAgeRange에서 작은 버그가 있어서 해당 내용 공유 드립니다.검색 조건을 리스트에서 작은 값의 범위로 지정을 했을 시 아래 해당 코드에서 length 가 최소 값이 1이 되므로 항상 리스트의 작은 값이 출력이 되는 버그가 있습니다.동작에 대한 예시 화면입니다. 따라서 length 를 구한 다음 리스트에서 해당 USERDATA의 age 값을 max 값과 비교를 해서 max 값보다 작을 경우에만 해당 코드들이 동작하게 되어야 하는 것이 맞는 것 같습니다. 다음과 같이 코드 수정 시 동작 화면입니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dfs 시간복잡도 질문
안녕하세요 큰돌님, 강의 잘 듣고 있습니다.간선리스트로 구현된 그래프에 dfs를 적용할 경우,시간복잡도는 O(|V|+|E|)로 알고 있습니다.만약, 주어진 그래프에서 각 노드가 4방향으로 간선이 뻗어있을 경우, 아래와 같은 방식으로 탐색을 이어나갑니다.int mv[4][2]={{0,1},{0,-1},{1,0},{-1,0}} for(int i=0; i<4; i++;) { int ny = y+mv[i][0] int nx = x+mv[i][1] }이때, 노드 개수를 V개면, 간선의 개수는 각 노드 별로 4개니까, |E|=|V|*4로 계산해서, 시간복잡도는 O(|V|*5) 인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백트래킹을 사용하는 경우 질문
안녕하세요 강사님, 강의 잘 듣고 있습니다.백트래킹은 완전탐색시 탐색하지 않아도 되는 부분은 건너뛰는 기능을 한다고 알고 있습니다.백트래킹은 기본적으로 완전탐색의 연산량을 줄여주는 역할을 한다는 것인데, 완전탐색으로 풀면 시간초과가 나는 문제를, 백트래킹을 적용해서 풀면 시간초과가 나지 않는 건 어떻게 판단할 수 있나요?완전탐색에 백트래킹을 적용해도 시간초과가 나는 경우에는 지체없이 다른 풀이법을 찾아야 하나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-L 시간복잡도 질문
안녕하세요 강사님, 강의 잘 듣고 있습니다.AC처럼 테스트케이스가 여러 개 주어질 경우, 제한 시간은 어떻게 고려해야 하는지 질문드리고 싶습니다.예를 들어, 주어진 문제의 제한 시간이 1초라면,테스트 케이스를 다 합해서 1초 안에 처리해야 하는 건지,아니면, 각 케이스를 1초 안에 처리해야 하는 건지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
조합 시간복잡도 질문
안녕하세요 강사님, 강의 잘 듣고 있습니다.조합을 구하는 함수의 시간복잡도에 대해 질문 드리고 싶습니다.// Online C++ compiler to run C++ program online #include <iostream> #include <vector> using namespace std; int r=0; vector<int> t; int cnt=0; int forcount=0; void combi(int idx) { if(t.size()==r) { cnt++; return; } for(int i=idx; i<=10; i++) { forcount++; t.push_back(i); func(i+1); t.pop_back(); } } int main() { // Write C++ code here while(true){ cnt=0; forcount=0; cin>>r; func(1); cout<<"cnt = "<<cnt<<"\n"; cout<<"forcount = "<<forcount; } return 0; }조합 함수의 시간복잡도는 O(nCr), 위의 함수에서는 cnt의 값이라고 알고 있습니다.그런데, 시간복잡도는 주어진 입력의 크기에 대한 연산의 총합이라고 알고 있습니다.그러면, combi 함수의 for문 연산의 수인 forcount도 고려해야 하지 않나요?왜? cnt만 고려해도 되는지 궁금합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
격자판 최대합 질문있습니다.
이렇게 for문안에 모두 넣었습니다. 예제 답으로는 154가 뜨지만 채점 시 100점으로 뜨네요. 혹시 문제없는 코드일까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 한번 봐주실 수 있으신가요?
function solution(arr) { const strArry = arr.split(""); let answer = []; let i = 0; while (i < strArry.length) { if (strArry[i] === "(") { answer.push(strArry[i]); } else { answer.pop(strArry[i]); } i++; } return answer.length === 0 ? "YES" : "NO"; } //console.log(solution("(()(()))(()")); console.log(solution("(((())))"));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
제 코드도 한번만 봐주실 수 있을까요? ㅠㅠ
function solution(sum, arr) { let left = 0; let right = 0; let add = 0; let count = 0; while (right < arr.length) { if (add >= sum) { add -= arr[left ++]; } else { add += arr[++right]; } if (add === sum) count++; } return count; } console.log(solution(6, [1, 2, 1, 3, 1, 1, 1, 2]));
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T. 번 강의 질문 스택 풀이시 시간복잡도
안녕하세요.강의 잘듣고잇습니다. 단순하게 풀엇을떄 2중 forloop 시간복잡도 O(N^2) . 시간초과 발생하였습니다. 스택 풀이로 하면 통과는 하게되는데,시간복잡도는 여전히 O(N^2). 인 것 아닌가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
제 코드에서 잘못된 부분을 알고 싶습니다!
안녕하세요 선생님,http://boj.kr/eabdc120ede54df9bf4da138381baa63 2870 번 수학숙제 문제를 풀어봤습니다.입력받은 문자열에서 알파벳은 모두 '*' 로 바꾸고, 변경된 문자열을 토대로 재귀 함수를 이용하여 정수 부분을 추출하려고 하였으나, 어째서인지 문자열의 첫 번째 정수만 출력되고, 두번째 정수는 출력되지 않습니다. 예를들어, "lo3za4" 라는 입력값이 들어가면, 출력으로 첫 번째 정수인 3만 출력되고, 4는 출력되지 않습니다. 어느 부분에서 어떤 실수가 있는지 알려주시면 감사하겠습니다. 좋은 강의 늘 감사드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 질문
안녕하세요 큰돌님 조금 다른 로직으로 풀었는데 TC랑 반례들 다 적용해보아도다 통과되는데 제출하면 틀렸다고 해서 제가 어느부분을 놓친건지 질문드립니다. 전역변수저는 연결정보를 다음과 같이 map과 set을 활용하였습니다.const int INF = 987654321; int n{}; int arPopular[15]{}; // 각 구의 인원수 저장 용도 map<int, set<int>> graph{}; // Key : 구. Value : 해당 구랑 연결된 구들 int minDiff = INF; // 나눠진 두 구의 최소 인원수 차이구현 함수 프로토타입// Gu - FindNode 가 서로 연결되어 있는지 여부 bool IsConnect(int Gu, int FindNode); // 하나의 구역이 끊김 없이 연결될 수 있는지 bool IsAreaConnected(const vector<int>& Area); // 인구수 차이 구해오기 int GetDifPop(const vector<int>& Area1, const vector<int>& Area2); 일단 저의 로직 순서는 다음과 같습니다.비트마스킹으로 모든 경우의 수를 탐색한다. 각 경우의 수마다 비트가 0이면 vector1에다가, 1이면 vector2에다가 넣어준다. 여기까지 되었으면 일단 두 그룹으로 나뉘어진다. 각 그룹에 대해서 Union Find 알고리즘을 적용해서 서로 끊기지 않고 연결될 수 있는지 확인한다. 만약 두 그룹 모두 끊기지 않고 연결될 수 있다면 우리가 원하는 2개의 구역으로 나눈것이다. 이하 최소 찾는 로직부터는 동일. 코드 링크는 여기있습니다!http://boj.kr/bbe484bd863f42fbba08a1e48b55dad2
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 질문 있습니다!
선생님 안녕하세요 !제가 푼 문제 코드는 다음과 같습니다.http://boj.kr/3475d11fa8a2499bba282e226bdc5e92제가 풀었을 떄는 시간초과가 났었습니다.여기서 여쭤볼 것이 있습니다. Q1. 제가 작성한 코드에서 시간 복잡도를 계산할 떄 최악의 수를 생각하고 계산을 합니다. N이 100,000이고 K는 1일 떄 제가 작성한 코드는 대략 3N의 시간복잡도가 나오는 것으로 계산하였습니다. 또한 선생님의 풀이를 저는 2N의 시간복잡도로 생각을 합니다. 그러면 만일 실전에서 제가 작성한 3N이 시간 초과가 뜬다면 2N으로 줄일 방안을 생각하는 것이 맞을까요?!?
-
해결됨코딩테스트 [ ALL IN ONE ]
시간복잡도 관련 질문입니다.
위 코드에서 for문이 n번 만큼 반복되고 그 안에 있는 while문이 도는 횟수의 총 합이 n번이라고 하셨는데 그렇다면 위 코드의 시간복잡도는 [for문 시간복잡도: o(n)] * [while문의 시간 복잡도 : {o(n-1) + o(n-3) + ... o(1)} ]= o(상수 * n) 이렇게 이해하면 되는 걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 질문입니다.
안녕하세요 큰돌님. 모든 경우의 수 탐색 과정에서궁금한게 있어서 질문드립니다. 모든 경우의 수를 탐색하기 + 각 경우의 수에서 합 구하기 를위해 다음과 같은 코드가 구현되는 것은 이해했습니다.for (int i = 1; i < (1 << n); i++) { // i는 모든 경우의 수에서 각 케이스이다. for (int j = 0; j < n; j++) { // i에 해당하는 경우의 수에서 합 구하기위함 if(i & (1<<j)) } } 여기서 질문드리고싶은게for문에서 i=1 부터 시작하는 이유가 i=0. 즉, 하나도 안고르는 경우는 탐색할 필요가 없기 때문인가요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
12번 암호문제 컴파일 에러가 나는 이유가 뭘까요?
package String; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class _01_12_암호_복습 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String s = br.readLine().strip(); s = s.replace('#', '1').replace('*', '0'); StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i += 7) { String word = s.substring(i, i + 7); sb.append((char) Integer.parseInt(word, 2)); } System.out.println(sb); br.close(); } }
-
해결됨코딩테스트 [ ALL IN ONE ]
climbing stairs를 top-down 방식으로 풀면 시간초과가 뜹니다
tabulation 방식의 Bottom-up은 재귀를 호출하지 않기 때문에 당연히 테케 통과하구요강의를 들었을때도 강사님은 피보나치 코드 그대로 사용하셔서 저도 그대로 제출했는데 시간 초과가 뜹니다... 원래의 코드는 아래와 같구요def climbStairs(self, n): memo = {} if n == 1 or n == 2: return n if n not in memo: memo[n] = self.climbStairs(n-1) + self.climbStairs(n-2) return memo[n]discuss를 참고해서 수정한 코드는 테케를 통과했는데 아래와 같습니다class Solution(object): def climbStairs(self, n): memo = {} return self.dp(n, memo) def dp(self, n, memo): # base cases if n == 1 or n == 2: return n if n in memo: return memo[n] memo[n] = self.dp(n-1, memo) + self.dp(n-2, memo) return memo[n]제가 봤을 때는 두 코드의 로직에 대한 차이점은 없어보입니다만 왜 아래의 코드는 시간초과가 나지 않는거죠??