묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
비트마스킹 개념 2-3 궁금합니다!
안녕하세요 강사님!오른쪽 쉬프트 연산자 >>를 설명하실때,11 >> 2라면 0011이 오른쪽으로 두칸 가서 0000이 되는거 아닌가요? 어떻게 2가 나오는지 궁금합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4659 질문드려요
안녕하세요, 정답 코드를 학습한 후에 복습을 하고 있는 도중, 함수로 조건을 정리하여 만들어보았는데 틀렸다고 나옵니다. 혹시 어떤 부분이 틀렸는지 알 수 있을까요?http://boj.kr/b27ed7900e964339b962f26ff685918f
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-G 배열 크기 질문
안녕하세요 큰돌님!5-G문제에서 배열의 소수를 만드는 크기를 4000004로하면 틀렸습니다가나오고 4000001로하면 맞는데이유를 잘 모르겠습니다.혹시 어떤이유로 틀리는 걸까요?소수를 확인하는 것은 4000001이던 4000004이던 상관없지 않나요? http://boj.kr/b9d1006666d949a09380a1dcd8f6b833
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-A 2178) tie(y,x)=q.front(); q,pop(); ??
안녕하세요!아직 실력이 부족하여 강사님의 코드를 하나하나 이해하며 공부하고 있는데 2-A 2178 DFS 문의드립니다.tie(y,x) = q.front(); , q.pop(); 코드가 이해되지 않습니다...int main(){ scanf("%d %d", &n, &m); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ scanf("%1d", &a[i][j]); } } queue<pair<int, int>> q; //먼저 큐를 정의하고 visited[0][0] = 1; // 시작점 0,0 방문하여 q.push({0, 0}); // 큐에 0,0 값을 넣어줍니다. while(q.size()){ //큐에 값이 있을 때까지 반복 tie(y, x) = q.front(); q.pop(); // y= q.first, x=q.second 뜻으로 tie를 써주고// pop...가장 앞에 요소를 제거..? for(int i = 0; i < 4; i++){ //현재 위치에서 상하좌우에 1이 있는지 탐색 int ny = y + dy[i]; int nx = x + dx[i]; if(ny < 0 || ny >= n || nx < 0 || nx >= m || a[ny][nx] == 0) continue; if(visited[ny][nx]) continue; visited[ny][nx] = visited[y][x] + 1; q.push({ny, nx}); } } printf("%d", visited[n - 1][m - 1]); return 0; 그럼 답변 부탁드립니다..
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 성능 향상 질문
안녕하세요. 바둑이 승차(DFS) 질문입니다.해당코드에서 성능을 더 향상시킬수있지 않을까 해서 질문드립니다.강사님이 작성하신 코드에서 if(L==N) 전에 if(sum==C)가 나오면 더이상 코드 진행을 하지 않아도 되는거 아닌가요? 그 때 flag값을 하나 추가해서 모든 재귀를 return 시키는 방법을 쓰면 더 좋을것같은데 제 생각이 맞나 궁금하네요.답변 부탁드리겠습니다.감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
Array의 요소 수정하기
안녕하세요 알고리즘 교안 112쪽에 Array의 요소 수정하기 예시 코드에서 궁금증이 생겨 질문 남깁니다.go함수와 go 2함수, go 3함수는 매개변수로 각각 a array자체, a의 크기, a의 포인터를 매개변수로 받는다고 되어있는데 main함수에서는 모두 array a를 매개변수로 넘겨서 활용하고 있는데 이게 왜 가능한지 궁금합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
root == p 를 비교하는법?
강사님의 풀이방법을 보면class Solution(object): def lowestCommonAncestor(self, root, p, q): left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if root == p or root == q: return root elif left and right: return root return left or right여기서 root.value == p가 아니라 어떻게 root == p로 비교할 수 있는 지 궁금합니다.아래는 제가 푼 방식입니다.class Node: def __init__(self, value=0, left=None, right = None): self.value=value self.left= left self.right = right def LCA(root,p,q): if root is None: return None left = LCA(root.left,p,q) right = LCA(root.right,p,q) if root.value == p or root.value ==q: return root elif left and right: return root return left or right root=[3,5,1,6,2,0,8,None,None,7,4] root = Node(value = 3) root.left = Node(value = 5) root.right = Node(value = 1) root.left.left = Node(value = 6) root.left.right = Node(value = 2) root.right.left = Node(value = 0) root.right.right = Node(value = 8) root.left.right.left = Node(value = 7) root.left.right.right = Node(value = 4) root= LCA(root,5,6) print(root.value) if root.value == p or root.value ==q: return root저는 여기서 root == p 를 하게 되면 아래 오류가 발생합니다.AttributeError: 'NoneType' object has no attribute 'value' 답변주시면 정말 감사하겠습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2852번 문제 이해가 안돼요.
안녕하세요 선생님.NBA농구 문제를 푸는데 문제 이해를 잘못 한 것 같아요.1팀, 2팀이 각각 이기고 있는 시간을 출력하는 문제인데요. 아래 예제로 예를 들면, 1팀이 이기고 있는 시간은 01:10 ~ 45:30 으로 44분20초가 되어야 하는 것 같은데, 왜 45:30인지 모르겠어요.예제 입력 2번에서는 01:10 ~ 21:10으로 1팀이 20분 이기고 있는 것이 맞는데 예제 3번에서는 왜 다른지 이해가 안돼요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F r선언
#include<bits/stdc++.h> using namespace std; int n, m, j, l, r, temp, ret; int main(){ cin >> n >> m >> j; l = 1, r = l + m - 1; for(int i = 0; i < j; i++){ cin >> temp; if(l <= temp && temp <= r) continue; else if(temp < l){ ret += (l - temp); l = temp; }else{ ret += (temp - r); l += (temp - r); } } cout << ret << '\n'; } #include<bits/stdc++.h> using namespace std; int n, m, j, l, r, temp, ret; int main(){ cin >> n >> m >> j; l = 1; for(int i = 0; i < j; i++){ r = l + m - 1; cin >> temp; if(l <= temp && temp <= r) continue; else if(temp < l){ ret += (l - temp); l = temp; }else{ ret += (temp - r); l += (temp - r); } } cout << ret << '\n'; } 안녕하세요 선생님 질문이 있어 이렇게 글을 남깁니다. r을 반복문 안에다 선언하면 맞고 밖에다 선언하면 틀렸다고 나오는데 도저히 이유를 모르겠습니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
if __name__=="__main__" 사용 기준
강사님 안녕하세요 :) 유익한 강의 잘 듣고 있습니다!학습 중 궁금한 점이 있어서 질문드립니다.강사님께서 DFS문제 외에도 코드 시작 부분에 이 코드를 작성하실 때가 종종 있는데 혹시 강사님의 사용 기준이 있는지 궁금합니다.ex) [섹션 8] 회장뽑기(플로이드-와샬) 사용 O vs 위상정렬(그래프 정렬) 사용 X
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
리뷰 부탁드립니다.
function solution(a,b){ let answer=0 let n = a.length let m = b.length let len = lt = 0 let char='' let arr =[] let sH = new Map() for(x of b){ if(!sH.has(x)) sH.set(x,1) else sH.set(x, sH.get(x)+1) } for(let rt=0; rt<m; rt++){ char += a[rt] if(sH.has(a[rt])) { sH.set(a[rt], sH.get(a[rt])-1) } if(sH.get(a[rt])==0) { len++ } if(len == sH.size){ answer++ } if(!sH.has(a[rt])) sH.set(a[rt],1) else sH.set(a[rt], sH.get(a[rt])+1) } const copySh = sH console.log(copySh) for(let rt=m; rt<n; rt++){ lt++ char = a.substring(lt, rt) + a.substring(rt, rt+1) if(char.split('').sort().join('')===b){ answer++ } } return answer } let a="bacaAacba"; let b="abc"; console.log(solution(a, b)); 저는 첫번째만 문자열 3개 3개만 hash 사용하여 비교하고 나머지는 sort해서 같은지 비교하는데 이경우도 복잡도 O(n2)일지 궁금합니다..!잘듣고있습니다. 감사합니다
-
해결됨코딩테스트 [ ALL IN ONE ]
[3번 문제] 완전탐색 (DFS, BFS) (후반부)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.보시면 dfs 끝나고if len(visited) == len(rooms):return True이렇게 되어있는데2번째 구문에서 visited = [False] * len(rooms)를 했기때문에 if len(visited) == len(rooms): 구문은무조건 참이 나올 수 밖에 없는 거 아닌가요?문제를 이해 하다 보니 막혀서 질문 드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-f 문제는 이해했는데 원래 작성한 코드가 왜 틀렸는지를 잘 모르겠습니다.
틀린 코드https://www.acmicpc.net/source/58095478문제는 이해를 했고 제가 짠 코드가 시간초과가 걸려야한다는 점도 이해했습니다.처음 접근시 이분탐색 + check로 문제를 해결하려고 했는데요.코드에서 naive하게 while문을 이용해서 몬스터의 체력을 공격력을 으로 빼주는 방법을 사용했고 용사가 먼저 때리고, 그다음 맞는 것도 구현했습니다.이런 접근이 기존 시간 복잡도를 logN * N * (100000) 까지 증가할 수 있다는 점은 이해를 했는데, 왜 백준에서는 시간초과가 아닌 틀렸다고 나오는지 이해가 안되서 질문드립니다.로직자체는 맞다고 생각이 드는데 시간초과도 틀리다고 뜰 수 있는걸까요?bool check(long long mid) { long long atk = hatk; long long hhp = mid; for (int i = 0; i < n; ++i) { if (v[i].t == 1) { mhp = v[i].h; matk = v[i].a; /* 왜 백준에서는 시간초과가 아니라 틀렸다고 나올까요? */ while (mhp > 0) { mhp -= atk; if (mhp <= 0) break; hhp -= matk; if (hhp <= 0) return false; } /* answer */ // long long div = mhp / atk + (mhp % atk ? 1 : 0); // long long cnt = div - 1; // hhp -= cnt * matk; } else { heal = v[i].h; addatk = v[i].a; atk += addatk; hhp = min(mid, hhp + heal); } /* answer */ // if (hhp <= 0) return false; } return true; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-B 세그먼트 에러
안녕하세요 큰돌님5-B번 문제를 제출하면 세그먼트 오류가 발생하는데원인을 찾지 못하겠습니다...강사님 코드와 크게 다른거같지 않은데 어디서 에러가 발생하는 걸까요? 항상 친절한 답변 감사드립니다:)http://boj.kr/fe751c8b73634cdf80e4de8ab6fefcce
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
14번 뒤집은 소수 문제 Time Limit 왜일까요?
/*선생님의 문제풀이와 일치한데 모든 테스트케이스에 대해서 Time Limit이 뜹니다ㅠ 왜일까요?*/ #include <iostream> using namespace std; int n,i,k,c,v; inline int reverse(int x){ int d,res=0; while(x>0){ d=x%10; x/=10; res=res*10+d; } return res; } inline bool isPrime(int x){ int i; if(x==1) return false; for(i=2; i<x; i++){ if(x%i==0) return false; } return true; } int main(void){ scanf("%s", &n); while(n-->0){ scanf("%d",&v); k=reverse(v); if(isPrime(k)) printf("%d ",k); } return 0; }
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
혼자 코드를 짜봤는데
안녕하세요. 강사님자료구조 공부하다가 방금 전 숫자만 추출하는 강의를 보고 이번 강의에서 응용해 보았는데 출력 값은 동일하나 채점 사이트에서는 오답이라고 나와서 어떤 부분에서 틀렸으며 어떻게 고쳐야 할까요?완전 코드를 잘못 구현했다면 제가 설명에서 어느 부분을 이해하지 못한 것일 까요? import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Main { public int solution(String s) { String answer = ""; s = s.replaceAll("[^0-9]", ""); // 숫자만 추출 while (s.length() > 0 && s.charAt(0) == '0') { s = s.substring(1); } Deque<Character> deque = new LinkedList<>(); // Deque 선언 (제네릭 타입 명시) // 문자열 s의 각 자리를 Deque에 추가 for (int i = 0; i < s.length(); i++) { deque.offer(s.charAt(i)); } // Deque에서는 0 제거 이후 while (!deque.isEmpty()) { char c = deque.peek(); if (c != '0') { answer += c; } deque.poll(); } return Integer.parseInt(answer); } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(T.solution(str)); } }위 코드는 오류가 나고 아래 코드는 컴파일 에러가 납니다.import java.util.Scanner; public class Main { public int solution(String s) { String answer = ""; s = s.replaceAll("[^0-9]", ""); // 숫자만 추출 while (s.length() > 0 && s.charAt(0) == '0') { answer = s.substring(1); } return Integer.parseInt(answer); } public static void main(String[] args) { StringTest1_9 T = new StringTest1_9(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(T.solution(str)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
세그먼트 트리 질문
세그먼트 트리 문제는 모두 펜윅 트리로 해결해도 되나요? 특정 구간합을 구할 경우에는 세그먼트 트리가 시간복잡도 상으로 유리할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 코드 오류 질문
안녕하세요 큰돌님, 코드를 작성 후 실행시켰을 때 오류가 나와 질문드립니다.제가 작성한 코드는 맨 아래에 있으며, 큰돌님의 코드와 비교 시 어떤 점이 문제있는지를 찾지 못했습니다.저 코드로 예제 입력시 값이 오류가 나옵니다.어떤 부분이 오류가 나오는지 알 수 있을까요?예제 입력 12 lo3za4 01예제 출력 11 3 4실제로 출력된 값01 11 [작성한 코드]#include <bits/stdc++.h> using namespace std; int n; string s, ret; vector<string> v; void go() { while(true) { if(ret.size() && ret.front() == '0') ret.erase(ret.begin()); else break; } if(ret.size() == 0) ret = "0"; v.push_back(ret); ret = ""; } bool cmp(string a, string b) { if(a.size() == b.size()) return a < b; return a.size() < b.size(); } int main() { cin >> n; for(int i=0; i<n; i++) { cin >> s; ret = ""; for(int j=0; j<s.size(); j++) { if(s[i] < 65) ret += s[i]; else if(ret.size()) go(); } if(ret.size()) go(); } sort(v.begin(), v.end(), cmp); for(string i : v) cout << i << "\n"; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-C 2468번 문제 왜 틀렸는지 모르겠어요
안녕하세요 강사님, 2468번 안전 영역 문제를 풀었고 예제도 다 맞는데 제출하면 틀렸다고 뜹니다. 풀이 강의도 들었는데 어디에서 틀렸는지 모르겠어요.#include<bits/stdc++.h> using namespace std; int N,h,ret,H,maxx; int a[100][100],visited[100][100]; int dy[] = {-1,0,1,0}; int dx[] = {0,1,0,-1}; void DFS(int y, int x) { visited[y][x] = 1; for(int i=0; i<4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if(ny<0|| nx<0|| ny>=N|| nx>=N) continue; if(!visited[ny][nx] && a[ny][nx]>H) DFS(ny,nx); } return; } int main() { cin>>N; for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { cin>>h; a[i][j]=h; } } for(H=0; H<=N; H++) { fill(&visited[0][0], &visited[0][0]+100*100, 0); ret = 0; for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { if(a[i][j]>H && !visited[i][j]) { DFS(i,j); ret++; } } } if(maxx < ret) maxx = ret; } cout<<maxx; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
본격 시작 전 기본세팅 관련 알고리즘 교안 18p 이해가 안 갑니다.
안녕하세요. 오늘 결제해서 수강하게 된 어떤 부트캠프 백엔드 수강생입니다.앞으로 있을 프로젝트 후 취준을 위해 지금부터 알고리즘공부 병행하려고 합니다.profile : {main lang : java,days left until project : 1 month,using Ide : intelliJ,pc : mac}다름이 아니라, c++도 처음이고 vscode도 처음이라 기본세팅을 어떻게 할지 잘 모르겠는데요.. 일단 교안대로 terminal에서 vi로 저렇게 a.cpp 파일만들어서 #include <bits/stdc++.h> using namespace std; string a; int main() { cin >> a; cout << a << "\n"; return 0; }잘 출력되는데,이것 외에 다른 코드들을 작성해서 출력하려고 하면 어떻게 해야 할지 모르겠어요. 저의 vscode 아래에 첨부합니다.저렇게 저장하려고 하면 에러뜨는 상황인데요, 혹시 경로가 잘못된걸까요? 어떻게 프로젝트를 열어야 하나요?그리고 마지막으로교안에 나온 저 명령어는 터미널에 치는 걸까요? 아니면 vscode에 쓰나요?