묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-A, bfs dfs 로직에 대한 질문
안녕하세요, 선생님. 이번 문제와 bfs, dfs 전반적 로직 관련해서 질문있습니다!!일단 이번 문제 정답 코드는 다음과 같습니다.http://boj.kr/f3c01a8b5af34478acc8344f21094f9a크게 바뀐거 없이, continue 조건문에서 범위체크하는 조건을 한번 빼봤습니다. 그런데도 정답에는 문제가 없더라구요.bfs든 dfs든 시작점에서 시작해서 상 우 하 좌 순으로 돌면서 탐색을 진행할텐데, 항상 경우에 따라 이차원배열의 모서리부근에서는 out of bound위험이 있고,이걸 그냥 복잡하게 고민안하고, 위험을 최소화 하기 위해서!bound -> continue 조건을 깔고 들어가는걸로 이해하고있습니다. 그런데, 위와같은 코드의 경우에는, 조건을 안걸면 분명히(-1, 0) 다시말해 out of bound 오류가 발생해야 할거같은데, 정답처리되는 이유를 잘 모르겠습니다. +) 또한, 강의중에 꼭 범위체크 뒤에 ||로 map에서 0이면 continue를 걸어야 한다고 하셨는데,이 이유도 왜 그런지 잘 모르겠습니다. 저희가 항상 시작할 때,map 전체를 0으로 초기화.조건에 맞게 map만들기.dfs/bfs이런식으로 진행되는데, 범위를 벗어난 지역은 어차피 visited도 false, 맵에도 0으로 표시되는게 보장될텐데,순서를 바꾼다고 해서 문제가 발생하는 일이 일어나나요?=> 이게 범위 관련 이슈때문에 범위를 맨 앞으로 빼야할것 같다는 생각이 들었습니다... 두번째로, bfs dfs 구현상 질문입니다.문제들의 경우에 따라서, if ~~ continue;if ~~ continue를 두번씩 사용하시는 경우를 봤습니다.(이번문제도 그렇습니다)이건 continue의 특성상, 아래라인에 else if를 안걸어도(컴파일러가 알아서 해줄지는 모르겠지만)else if를 거는듯한 최적화의 효과를 얻을 수 있겠다고 보이긴 합니다. 그런데, 저런식으로 continue문을 여러줄에 걸쳐서 쓴다는건,if ~~~ continue; (1조건)if ~~~ continue; (2조건)이렇게 1조건으로 필터링 하고, 1조건에 안걸리는 (여집합) 대상들에 대해 2차적인 필터를 하는걸로 생각이 드는데,"이제부터 항상 continue관련 조건은 다 ||로 엮어서 한 if문으로 처리한다" 라고 일반화하고 진행해도 괜찮을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-N 질문있습니다.
http://boj.kr/907e9f4775da48d8bb4c13e5d16d0c21결국 그럼 중앙이 루트좌우 나눠서 그곳의 중앙이 또 parent 이걸 무한히 반복한다고 생각햇고 BFS를 레벨별로 묶어서 처음에는 root를그다음에는 root에 연결된 자식을그 다음에는 그것에 연결된 자식들을 출력하는 방식으로 풀었습니다. 하지만 출력 초과가 나와서 어떤 문제가 있는지 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 2편
<> 유무
MyLinkedListV3 stringList = new MyLinkedListV3<>();에서는 <> 가 있어야 하는데 왜 MyLinkedListV3 stringList = new MyLinkedListV3[CAPACITY]; 에서는 <> 를 쓰면 안되는지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제 번호를 어디서 찾나요?
다른 강의들은 시작할때 백준 몇번인지 알려주 셨는데 이번 강의는 없는 것 같아서요. 각 강의가 몇번 문제인지 작성된 곳이 있나요?
-
미해결김영한의 실전 자바 - 중급 2편
6강 해시 충돌 구현
2:30 를 보면 영한님께서 해시 테이블에서 Linkedlist 를 전체 버킷의 컨테이너로 사용하셨는데, ArrayList 를 전체 버킷의 컨테이너로 사용해도 전혀 문제가 없지 않나요 ?따라서, 해시 테이블에서 ArrayList를 전체 버킷의 컨테이너로 사용하고, 각 버킷 내에서는 LinkedList를 사용해 충돌을 처리하는 방법도 괜찮지 않나요 ?
-
미해결김영한의 실전 자바 - 중급 2편
Comparable이 아닌 Comparator를 사용하는 경우
이 부분에서 '기본 정렬 외에 다른 정렬 방법을 사용해야 하는 경우'가 잘 이해가 되지 않는데요. 예를 들어, MyUser에서 age는 int형이라서 '<' 비교 연산이 가능하지만 id는 String이라 비교 연산을 할 수 없기 때문에 Comparable이 아닌 Comparator를 사용하는 건가요?'기본 정렬 외에 다른 정렬 방법을 사용해야 하는 경우'가 이러한 경우를 의미하는 건가요??만약 그렇다면 SortMain2에서 AscComparator, DescComparator를 Comparable이 아닌 Comparator로 구현한 이유가 무엇인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 질문있습니다.
http://boj.kr/027eca9de7df4d9ebd1326b9d1fde13b 저는 이런식으로 풀었습니다. 그런데 제가 틀린 문제는 복습을 하고 있는데 이렇게 큰돌님과 다르게 푼 문제가 있다면 그런 문제들도 복습을 해주는게 좋을까요? 아니면 그냥 맞았다면 넘어가는게 나을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dfs관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.dfs를 돌릴때 왼쪽부터 탐색하는 이유가 인접리스트를 구성할때 왼쪽의 노드값을 먼저 넣어줬기 때문이라고 추론을 해봤습니다. 그렇다면 인접리스트를 구성할때 순서를 달리하면 (예를 들어 1:: 3,2처럼) dfs가 제대로 작동을 못하지 않습니까? 그럼 인접리스트를 구성할때 어떤 로직에 입각해서 인접 리스트를 작성해야하나요.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 질문ㅇ드립니다
결국 메인 로직은 BFS를 돌려서 백조끼리 만날수있나 검사한다.얼음을 만나면 얼음 위치를 저장한다얼음을 지운다.얼음을 만나면 얼음위치를 저장한다.인거 같은데 queue를 2개쓰지 않고 그냥 temp 큐 한개만 얼음을 담는 용도로 사용해도 되지않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 질문있습니다 :)
안녕하세요 선생님 🙂 문제를 풀다가 정신이 나가버릴거 같은 느낌은 이 문제풀면서 처음 겪는거 같습니다.. 어떻게든 풀려고 하루종일 박치기를 해봐도 어질어질하네요..ㅠㅠ 인접행렬을 만들어주는거는 예전에 배웠던 적이 있기 때문에 무리없이 이해했습니다. for(int i = 1; i < (1 << n) - 1; i++) 모든 켜져있는 경우를 체크하려면 for(int i = 1; i <= (1 << n) - 1; i++)이 되어야하지 않나요? n이 6일 경우에, 111111을 빼고 111110까지만 체크하는 이유를 모르겠습니다. 이렇게 할 경우에 access violation이 뜨는데요, 도대체 뭘까요?? ㅠㅠ 비트가 켜져있는 모든 경우를 체크하여 켜져있을 경우에 comp배열에 1을 저장하고, 그 값이 dfs함수에서 두번째 파라미터와 같다면 재귀를 돌리고, 재귀를 돌린 값으로 누적을 시키신건 알겠습니다. 근데 이 comp배열이 어떤 아이디어로 생성된 배열인지 모르겠습니다.. 그동안 문제들을 풀면서 몇 번의 벽이 느껴졌었지만 항상 시간을 박으면서 극복해왔습니다. 근데 이 문제는 도저히 해결이 안될거 같은 벽처럼 느껴지네요.. 선생님의 도움이 절실히 필요합니다 흑흑..
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
Event Loop
Event Loop 함수에서 함수포인터 배열를 사용하여 Lookup 테이블 구조로 변경 하는 도중에 에러가 발생하여 질문 남깁니다! void (*EventFunc[EVENT_COUNT])(void) = { 0, AddNewUser, SearchByName, SearchByAge,PrintList, SearchByNameToRemove };위 코드와 같이 EVENT_COUNT 를 #define EVENT_COUNT 6 매크로로 정의 했을때 오류가 발생 합니다.void (*EventFunc[6])(void) = { 0, AddNewUser, SearchByName, SearchByAge,PrintList, SearchByNameToRemove };EVENT_COUNT를 매크로로 정의 하지 않고 6으로 하드코딩 할때는 컴파일이 잘되는데 서로 다른 결과가 나오는 이유가 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 질문있습니다
http://boj.kr/dd6737fde63945129d78f247d40f557d같은 로직으로 풀었습니다. 차이점하나는 강사님은 flag로 검사를 하였고저는 바로 turn을 출력하고 끝낸것인데 왜 제 방식이 틀렸는지 이해가 되지 않습니다.
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
시간초과를 자력으로 해결하지 못했습니다 😓
안녕하세요, 강의를 듣고 계신 여러분!여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요!강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지를 명확히 제시해 주시면 답변에 도움이 됩니다!자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의자신은 어떻게 이해했는지DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해어떤 부분이 궁금한지 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요?안녕하세요. 선생님.저번 설명과 조언 너무 감사합니다. 그,, 백준 2580 스도쿠에 관한 질문인데요,시간 초과를 해결하지 못하였는데,각각을 보면 그렇게까지 시간이 많이 들지는 않을 거 같다는 생각도 들구..재귀를 사용하지는 않았지만,어디서 시간이 많이 걸리는 지 분석이 안되어서요..선생님 도움이 필요해서 질문 남깁니다.. arr = [list(map(int, input().split())) for _ in range(9)] # 스도구 문제 배열 idxs = [] # 인덱스 쌍을 담는 배열 for i in range(9): for j in range(9): if not arr[i][j]: idxs.append((i,j)) def fillHori(y, x): # 가로 nums = 45 # 1~9까지의 합 for i in range(9): if x == i: continue # 자기 자신 탐색 제외 if arr[y][i] == 0: return 0 # 0이 또 있으면 채울 수 없음 nums -= arr[y][i] return nums def fillVerti(y, x): #세로 nums = 45 # 1~9까지의 합 for i in range(9): if y == i: continue # 자기 자신 탐색 제외 if arr[i][x] == 0: return 0 # 0이 또 있으면 채울 수 없음 nums -= arr[i][x] return nums def fillSquare(y, x): #사각형 nums = 45 # 1~9까지의 합 for i in range(y // 3 * 3, y // 3 * 3 + 3): for j in range(x // 3 * 3, x // 3 * 3 + 3): if y == i and x == j: continue # 자기 자신 탐색 제외 if arr[i][j] == 0: return 0 # 0이 또 있으면 채울 수 없음 nums -= arr[i][j] return nums def fillCrossDown(y, x): # 대각선(안씀) nums = 45 # 1~9까지의 합 for i in range(9): for j in range(9): if y == i and x == j: continue # 자기 자신 탐색 제외 if arr[i][j] == 0: return 0 # 0이 또 있으면 채울 수 없음 if y - x == j - i: nums -= arr[i][j] return nums def fillCrossUp(y, x): # 대각선(안씀) nums = 45 # 1~9까지의 합 for i in range(9): for j in range(9): if y == i and x == j: continue # 자기 자신 탐색 제외 if arr[i][j] == 0: return 0 # 0이 또 있으면 채울 수 없음 if y + x == j + i: nums -= arr[i][j] return nums while idxs: for i, j in idxs: n = fillHori(i, j) if n: arr[i][j] = n; idxs.remove((i,j)); continue n = fillVerti(i, j) if n: arr[i][j] = n; idxs.remove((i,j)); continue n = fillSquare(i, j) if n: arr[i][j] = n; idxs.remove((i,j)); continue n = fillCrossUp(i, j) if n: arr[i][j] = n; idxs.remove((i,j)); continue n = fillCrossDown(i, j) if n: arr[i][j] = n; idxs.remove((i,j)) for a in arr: for i in a: print(i, end = ' ') print()
-
미해결김영한의 실전 자바 - 중급 2편
implement iterator 주석처리 해도 myArray는 배열 아닌가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]순회 2 -향상된 for문 1;18초에서 implememt를 주석 처리 하고 향상된 for문을 돌렸을 때 배열이거나 iterable이여야한다고 에러가 떴습니다 .근데 MyAraayMain에서 이미 myarray 는 new int [] {1.2.3.4}로 배열로 선언한거 아닌가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-i 문제 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 1-i에 1165 가 맞나요? 백준 홈페이지에서 1165 는 단어퍼즐이고 포켓몬 마스터는 9987번 으로 나와서 질문드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 질문있습니다 :)
안녕하세요 선생님 🙂이번 문제 진짜 어려운 문제인거 같더라구요;; ㅎㅎ 문제를 풀면서 몇가지 풀리지 않는 의문이 있어서 질문 드립니다. http://boj.kr/2f42a7b2bc644e2e8db2ab8729507b5d 선생님께서는 go함수의 here = n + 1인 경우에 함수를 리턴시키셨는데요, n = 3일 경우에 go(1)부터 시작하여 go(4)까지 재귀를 돌리면 총 8번의 go(4)를 사용합니다.하지만, go함수의 리턴시키는 조건이 here = n일 경우에는 go(3)까지 총 4번의 go(3)을 사용합니다. 입력 조건의 n이 3일 경우에 3번만 돌리면 된다고 생각하는데요, 경우의 수를 추가로 넣어주신 이유가 궁금합니다. 추가로, 뒷면이 위를 향하도록 놓인 동전의 개수를 2개보다 작게 만들 수 없다라는 조건이 있는데요, 이 처리를 안해도 되는 이유가 궁금합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코드에 어떤 오류가 있는걸까요..?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.위 사진처럼 000과 001 로 이루어진 문자열을 atoi를 이용하여 변환 후 사용하였을 때 다음과 같이 출력되는 것을 보고 이를 사용해서 문제를 풀려고 시도하였고 코드는 다음과 같습니다.#include <bits/stdc++.h> using namespace std; //2870 - 수학 숙제 int n; string s; vector<int> v; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n; for(int i=0;i<n;i++){ string tmp=""; cin>>s; for(char c:s){ if(c>='a' && c<='z'){ if(tmp!=""){ int num = atoi(tmp.c_str()); v.push_back(num); tmp=""; } continue; } tmp+=c; } if( tmp!=""){ int num = atoi(tmp.c_str()); v.push_back(num); tmp=""; } } sort(v.begin(), v.end()); for(int i:v) cout<<i<<'\n'; return 0; }제가 사용한 로직은 문자열을 입력 받고 알파벳이 나오기 전까지 숫자를 tmp라는 string 변수 저장 후 알파벳이 나오면 해당 tmp를 atoi를 사용하여 integer로 변환하고 vector에 push하도록 하였습니다.따라서 해당 vector에는 integer 값으로 이루어져있기 때문에 기존의 sort 함수를 그대로 사용해도 된다고 생각했고 이를 토대로 코드를 작성하고 출력까지 진행하였습니다. 테스트 케이스들에 대해서는 전부 알맞게 출력되었고 제출을 하였는데 틀렸다고 출력됩니다. 어떤 부분에서 혹은 어떤 반례가 존재하여 해당 코드가 잘못되었는지 알 수 있을까요? 좋은 강의 항상 감사드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
개념 교안 파일 질문드립니다
안녕하세요, 큰돌님2주차 진행 중인 학생입니다. 좋은 강의 덕분에 즐겁게 코테 공부하고 있습니다!다름이 아니라, 개념 교안 pdf파일은 2주차까지 밖에 없는 건지 궁금합니다.아니면 해당 주차의 강의를 수강할 시 교안 파일을 다운 받을 수 있게 활성화되는 걸까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-I 런타임에러 확인
안녕하세요 강사님.제가 작성한 코드가 예제는 맞게 나오는데, 백준에 제출하면 런타임 에러가 나옵니다. 한 번 확인해 보시렵니까!?http://boj.kr/909851fccc5b446db825a1bb6d1df5fd감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-f 코드 질문드립니다!
http://boj.kr/173bd797559a4a5d88f48a6dee8c0d05요렇게 풀었는데 런타임 에러가 나서 이유가 궁금해서 질문드립니다!cout으로 디버깅해봤는데 위 코드에서 inputWord 는 길이가 출력되지만 rot13Word 는 0 으로 출력됩니다!