묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 질문
큰 돌 선생님 안녕하세요.항상 명강의 잘 듣고 있습니다. (_ _)다름이 아니라 약간 큰 돌쌤을 빙의해서 문제들을 먼저 풀고 > 해결을 보면서 차근차근 나아가고 있는데요. 다름이 아니라 3197 백조의 호수2개의 Queue 로 푸는 건 인지했습니다. 그런데 시간 초과가 발생해서요.코드 링크 http://boj.kr/23d82bb7e38c40b094f71a83b76d7e19제가 예상하는 부분은 check() 메서드에서 fill(&visited2[0][0], &visited2[0][0] + (SIZE - 1) * (SIZE - 1), 0);이 부분이 시간 초과에 영향이 큰 것 같은데 맞을까요? 문제는 이제 틀리더라도 맞는 방향으로 나아가는 것 같은데, 항상 문제를 풀고 나면 시간 계산을 할 때 어렵네요.바쁘지 않으실 때 확인 부탁드립니다.감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-N 보충 의견 드립니다
안녕하세요, 큰돌 선생님!완전 이진 트리에 대한 설명에 대해 보충 의견 드리고자 글 남기게 되었습니다. 설명 중 "완전이진트리의 특징은 깊이가 3일 경우 2^3 - 1 = 7개의 노드를 갖는다" 라고 설명해주신 부분이 존재합니다.다만 해당 특징은 완전이진트리 중에서도 포화이진트리에 대한 설명으로 알고 있습니다.문제의 조건 중 2^k - 1 개의 노드를 갖는다는 조건이 존재하기 때문에, 단순한 완전이진트리가 아닌 포화이진트리가 되기 때문에 해당 문제의 해설이 성립될 수 있었던 것이라고 생각합니다. 혹시 제가 완전이진트리에 대한 개념이 잘못된거라면 지적 부탁드립니다! 감사합니다.
-
미해결자바 코딩테스트 - it 대기업 유제
비밀번호
package 인프런.시뮬레이션_복습01; import java.util.HashMap; import java.util.Map; public class 비밀번호 { public static class Point{ int row; int col; Point(int row,int col){ this.row=row; this.col=col; } } private static Map<Integer,Point> map; private static final int INF=3; private static int getDistance(int row1,int col1,int row2,int col2){ return (int)Math.pow(row1-row2,2) + (int)Math.pow(col1-col2,2); } private static boolean isValid(int dis){ //거리가 대각선 포함 이동시간이 1인 경우 if(dis<=2) return true; return false; } static class Solution { public int solution(int[] keypad, String password){ int time = 0; map=new HashMap<>(); for(int i=0;i<INF*INF;i++){ map.put(keypad[i],new Point(i/3,i%3)); } String[] inputs=password.split(""); /** * 시작 값 초기화 */ int nowX=map.get(Integer.parseInt(inputs[0])).row,nowY=map.get(Integer.parseInt(inputs[0])).col; for(int i=1;i<inputs.length;i++){ int x=Integer.parseInt(inputs[i]); int nRow=map.get(x).row; int nCol=map.get(x).col; if(nowX==nRow && nowY==nCol) continue; if(isValid(getDistance(nowX,nowY,nRow,nCol))){ time++; }else{ time+=2; } nowX=nRow; nowY=nCol; } return time; } public static void main(String[] args){ Solution T = new Solution(); System.out.println(T.solution(new int[]{2, 5, 3, 7, 1, 6, 4, 9, 8}, "7596218")); System.out.println(T.solution(new int[]{1, 5, 7, 3, 2, 8, 9, 4, 6}, "63855526592")); System.out.println(T.solution(new int[]{2, 9, 3, 7, 8, 6, 4, 5, 1}, "323254677")); System.out.println(T.solution(new int[]{1, 6, 7, 3, 8, 9, 4, 5, 2}, "3337772122")); } } }해시맵을 사용하여 풀었는데 이 방법도 시간 복잡도 혹은 공간 복잡도면에서 괜찮나요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 맞왜틀팁 질문
안녕하세요 선생님!저는 3-D (4179) 문제를 다른 방식으로 풀었어요.불이 확산되는 속도 vs 사람이 빠져나가는 속도를 비교한게 아니라, 매 loop마다 불을 먼저 확산시키고, 그다음 사람을 움직여보면서 탈출 가능여부를 체크했어요.또한, index를 0이 아닌 1부터 사용하도록 구현해두어 그에 맞게 조건문들도 구현해두었고요.제가 만든 테스트 케이스, gpt가 만들어준 테스트 케이스는 전부 통과하는데 백준에서는 계속 틀렸다고 나오네요. 어떤 테스트 케이스에서 걸리는건지 도통 모르겠는데, 도와주실 수 있으신가요?http://boj.kr/fafb46e051fc462fb1c2e8c1f12c403f
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다!
마지막에 cout을 할때 mp.find를 하려니 에러가 발생해서 막혔었습니다. 강의를 보니 []로 뽑아서 하시던데 find를 사용할때와 []를 사용할때를 어떻게 구분해야할지 감이 잘 잡히지 않습니다!
-
미해결Do it! 알고리즘 코딩테스트 with C++
10986번 질문 있습니다!
안녕하세요!지금 알고리즘 책을 보면서 공부 중인데, 사소한 의문이 생겨 질문드립니다.책에서는 구간합 배열을 저장하는 S 벡터와 나머지 카운트를 저장하는 C 벡터의 자료형을 long으로 사용하고, 정답을 누적하는 answer는 long long으로 선언하셨습니다.조건을 보면 구간합 배열의 원소가 최대 101510^{15}1015까지 커질 가능성이 있어, long long을 쓰는 것이 안전해 보입니다. 그런데 책에서는 S와 C에 long을 사용한 것이 의아했습니다.조사를 해보니, 백준 온라인 저지의 채점 환경은 64비트 Linux라서 long이 8바이트로 long long과 동일한 크기라는 것을 알았습니다.그런데 answer는 굳이 long long으로 선언한 특별한 이유가 있는지 궁금합니다. 혹시 제가 놓친 자료형 선택의 의도가 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-ㅣ 질문있습니다
http://boj.kr/08916a4be30641928e5ee933aa6ccc62해당 문제풀이에서 뭐가 잘못됬는지 잘 모르겠습니다.테스트 코드는 잘 돌아가는데 어떤 부분에서 논리적오류가 발생했는지 알수있을까요풀이 로직은 1과 2의 스코어가 같을때 이전에 이기고 있던 사람이 있다면ret에 더해주기 이고승부가 갈리는 시점만 시간을 기록해둔다 입니다/.그래서 s1-s2==1이고 이전에 비기고 있던 상태 즉 winner==0이라면해당 시점의 승자를 1로 세팅하고 시간을 기록하고요s1==s2로 같이지고 이기고 있던 winner가 존재한다면 해당 시점의 시간을 정수로 저장하려합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 쿼드트리 질문 있습니다!
안녕하세요! 쿼드트리 문제를 풀던 중, 도저히 감이 잡히지 않아서4구역으로 나누어 문제를 해결해야 한다는 힌트를 얻고, 문제를 풀었습니다.예제로 테스트 완료 후에 큰돌님 해설과 비교하는 과정에서 제 코드와 조금 다른 점을 발견했습니다.아래 링크는 제가 작성한 코드입니다.http://boj.kr/ba004714b82449848c1e7cafc9afb6f7go라는 함수에서 bool 값을 통해 그냥 값을 내보낼지, 괄호 안에 다시 4구역의 값을 구해 넣을지를 다음 단계에서 수행하도록 했는데, 웬만한 테스트케이스에서는 잘 통과함에도 불구하고 틀렸다는 결과가 나오더라구요 4구역으로 나누어 다시 재귀함수를 호출하는 부분이 꼭 이중for문 내부에 있어야만 하는 건가요?틀린 이유를 찾고 싶어서 질문 드립니다 ㅜㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-F 틀린이유 모르겠습니다
http://boj.kr/b9ecf8f79edf460b9dc47213ca5a045b저는 분명 모든 조건을 다 맞게 썼다고 생각하는데 자꾸 틀렸다고 나오네요 이유를 모르겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-O 문의 드립니다!
안녕하세요 강사님 강의 매우 잘 듣고 있습니다!제 방식대로 하다가 잘 안된 부분들은 강사님 로직을 참고해서 구현해봤는데요예시 문제는 올바르게 값이 나왔습니다.하지만 채점을 돌리면 3%쯤에서 오답으로 나오는데... 어느 로직에서 잘못됐을까요...?질문하기 게시판의 반례 예시는 다 맞았습니다..! http://boj.kr/43dc36e6e08c4f1985b78c9d306f4bf5
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
탑다운 재귀 방식 - 초기화 값(INF vs. -1)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 항상 좋은 강의 감사드립니다!해당 문제를 풀면서 생겼던 문제 관련해서 문의드리고자 합니다. 제가 처음 풀었던 방식은 기존 탑다운 방식과 유사하게 (초기메롱) 방식으로 풀이를 진행하였으나 아래와 같이 시간 초과가 떴습니다.https://www.acmicpc.net/submit/2294/97783160 이로 인해 재귀 방식으로 인한 시간초과인가? 바텀업 방식을 써야되구나라고 생각은 하였으나 아래와 같이 초기값을 -1로 초기화하고 진행하였을 때는 바텀업(반복문)방식보다는 조금 느렸지만 통과하였습니다.https://www.acmicpc.net/submit/2294/97784123 두 코드의 차이가 어디서 발생하는지 와닿지 않아 이렇게 문의드립니다. 감사합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-E 시간 초과 관련 질문입니다.
안녕하세요 선생님.제가 이 문제를 재귀함수를 이용하여 스스로 풀어보았는데 , 주어진 문제의 public test case 중에서는354 18 6 을 제외하고는 모두 잘 출력이 되는데위와 같이 주어지는 csv의 체력이 커서 경우의 수가 많이 늘어나는 경우에는 한참을 기다려도 출력이 안나옵니다.제가 생각하기에는 분명 백준 사이트에서 시간 초과로 문제를 틀릴 수 는 있지만, 내 개인적으로 돌리는 vsstudio 내에서는 그래도 어느 일정시간이 지나면 답이 출력되긴 해야할 거 같은데 ,계속 무한루프를 돌게되는 이유가 무엇인지 궁금합니다.그리고 저런 test case 경우에 어떤 식으로 시간복잡도를 예측하고 들어가면 좋을지 문의드립니다.항상 강의 잘 듣고 있습니다. 감사합니다. http://boj.kr/8e0b513f68164e089f604cc0d00cf216
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6주차 6-B 2343 질문있습니다.
#include <bits/stdc++.h> using namespace std; int n, m; int a[100004]; int ret = 1e6; bool check(int e) { int sum = 0; int cnt = 0; for (int i = 0; i < n; i++) { if (sum + a[i] > e) { cnt++; sum = a[i]; } else { sum += a[i]; } } if (sum != 0)cnt++; return cnt <= m; } int main() { cin >> n >> m; int l = 0; int r = 0; for (int i = 0; i < n; i++) { cin >> a[i]; r += a[i]; } while (l <= r) { int mid = (l + r) / 2; if (check(mid)) { ret = min(ret, mid); r = mid - 1; } else { l = mid + 1; } } cout << ret; }이 코드로 제출했을때 계속 중간에서 막혔습니다.해서 범위가 잘못됬나 싶어서 #include <bits/stdc++.h> using namespace std; int n, m; long long a[100004]; long long ret = 1e9; bool check(long long e) { int sum = 0; int cnt = 0; for (int i = 0; i < n; i++) { if (sum + a[i] > e) { cnt++; sum = a[i]; } else { sum += a[i]; } } if (sum != 0)cnt++; return cnt <= m; } int main() { cin >> n >> m; long long l = 0; long long r = 0; for (int i = 0; i < n; i++) { cin >> a[i]; l = max(l, a[i]); r += a[i]; } while (l <= r) { long long mid = (l + r) / 2; if (check(mid)) { ret = min(ret, mid); r = mid - 1; } else { l = mid + 1; } } cout << ret; } longlong 으로 바꿔서 실행한 결과 통과가 됬습니다. 하지만 int 형으로는 왜 풀리지 않는지 이해가 가지 않아서 질문드립니다. 충분히 int로도 풀려야 하는거 아닌가요? 이해가 가질 않아서 질문드립니다. 하다보니 벌써 6주차네요. 항상 좋은 강의 감사합니다. ㅎㅎ
-
미해결김영한의 실전 자바 - 중급 2편
pop()과 poll()의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Stack의 메서드인 pop()과Queue의 메서드인 poll()의 차이를 보니stack이 비어있을 때 pop을 실행하면 NoSuchElementException 예외가 터지고, queue가 비어있을 때 poll을 실행하면 null이 반환되는데, 왜 이렇게 차이를 두고 설계를 한건지 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
학습 관련 질문
안녕하세요 항상 강의 잘 듣고 있고 유튜브도 재밌게 잘 보고 있습니다.제가 4주차까지 진도를 나가면서 개념 강의를 보면 이해가 되는 것 같으면서도 막상 문제를 풀려고 하면 막막합니다. (3주차부터 약간 벽느끼고 있습니다)스스로 풀 수 있는 문제가 거의 없고 1시간 이상 시도만 하다가 해설 강의를 보는 편인데 그 마저도 고민한 해결법과 다른 경우가 많네요아무래도 알고리즘적인 사고가 덜 잡힌 것 같아요...진도를 계속 나가는게 좋을지, 1주차부터 돌아가서 못풀었던 문제를 다시 푸는게 좋을지 고민이 됩니다.조언해주시면 감사하겠습니다!
-
미해결김영한의 실전 자바 - 중급 2편
특정 index의 노드 조회하기 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]1. 특정 index의 노드 조회하기에서 index의 값을 0이나 1로 설정하고 실행시키면0으로 설정시: index0Node = [A->B->C]1으로 설정시: index1Node = [B->C]이런식으로 출력이 되는데 저희가 의도한 출력은 특정 index의 값이므로 index가 0이면 [A], index가 1이면 [B] 와 같이 출력이 되어야 맞는게 아닌가해서 질문드립니다! 메서드를 구현할 때 영한님께서는 Node x = node; 이런식으로 변수에 받아서 구현을 하시는데 제 생각에는 x라는 변수가 굳이 필요 없을 것 같아 아래 코드와 같이 작성해보았는데 잘 작동하였습니다. 변수 x에 담아서 메서드를 처리하는 의도가 따로 있는건지 궁금합니다! 감사합니다private static Node getNode(Node node, int index) { for (int i = 0; i < index; i++) { node = node.next; } return node; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
순열로 풀시 정렬이 안되는 경우도 있는거 아닌가요??
정렬이 되지 않는 경우도 있을거 같은데 왜 문제가 풀리는지 잘 이해가 안갑니다. 처음부터 7까지 짤라서 다시 sort 시키는 건 필요없나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
0주차 교안은 삭제 된건가요?
알고리즘 교안을 읽었는데 0주차에 관한 내용이 사라진거 같습니다. 혹시 삭제가 된건가요?
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
첫번째 루프에서 최소값을 못찾았는데 계속 진행하는 이유가 무엇인가요?
이미 정렬이 된 노드에서 범위기반 탐색을 하는데 min보다 같거나 큰값을 못찾았다는건리스트 내의 모든 값이 min보다 작다는것 아닌가요? 그렇다면 왜 바로 종료시키지 않고 헤드 다음을 기준으로 MAX 까지 다시 탐색하는지 이해가 가지 않습니다.
-
해결됨iOS 앱 수익화를 위한 시작, 스위프트 문법 마스터 [초급, 중급, 고급]
앱에 누락되어 있어요
앱에 COW 내용이 누락되어 있네요