묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
고생했던? 케이스에 대해 선생님의 코드가 어떻게 들어맞는 지에 대한 질문이 있습니다. ㅠ
안녕하세요, 강의를 듣고 계신 여러분!여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요!강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지를 명확히 제시해 주시면 답변에 도움이 됩니다!자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의자신은 어떻게 이해했는지DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해어떤 부분이 궁금한지 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요?안녕하세요!강의 잘 듣고 있습니다.백준 1461 그리디 마지막 문제에 대한 질문이 있는데요. 보기 전에 풀어보긴 했는데,두더지 잡다가 어떻게 된 느낌이긴 해요..음,, 아직 습관이 안 고쳐지기는 했는데 정의하고 분석하고 따져보고 그려본 다음에 해야 하는데,, 그 제가 처음 푼 방식은리스트 요소를 지워가며 해결하는 방식인데요양/음수가 m으로 떨어지지 않는 나머지 경우를 먼저 따져 합계에 더하고, 제거한 뒤먼 데부터 다녀오는데, 최댓값을 계속 갱신해서가장 먼 거리를 나중에 빼주는 방식으로 했어요..m으로 나누어 떨어지지 않는 경우에 대한 처리를 나중에 추가했는데요선생님의 코드가 어떻게 그 경우도 잘 처리하는 지 분석이 잘 안되어서..설명 부탁 드려요.. 아! 저번 설명 너무 감사합니다 더불어 약간 공부하는 루틴?이랄까? 그런 것도 말씀해 주실 수 있는 게 있다면 혹시 말씀 부탁드려요..(코테 공부도 그렇고 다른 것도 그렇고..) 아래는 제가 처음 정답 받은 코드입니다.(코드가 지저분함에 죄송해요..)import sys input = sys.stdin.readline # 방향을 결정하고 상자 들고 다음에 처음 갈 책 위치를 반환합니다. def getPos(arr): global direction maximum = max(map(abs, arr)) if maximum in arr: if len(arr) > m: direction = False if min(arr) >= 0: direction = True return 0 for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i else: direction = True for i in range(len(arr)): if arr[i] >= 0: return i else: if len(arr) > m: direction = True if max(arr) < 0: direction = False return len(arr) - 1 for i in range(len(arr)): if arr[i] >= 0: return i else: direction = False for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i return -1 n, m = map(int, input().rstrip().split()) arr = list(sorted(map(int, input().rstrip().split()))) cnt = 0; direction = True; reach = 0; plusCount = 0; minusCount = 0 #양수/음수 따로 헀어야 좋았는데, 하다보니 개수 세는 걸 만들었어요.. def count(): global plusCount, minusCount for i in arr: if i >= 0: plusCount += 1 elif i < 0 : minusCount += 1 count() #양수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if plusCount % m != 0: mini = min(i for i in arr if i >= 0) idx1 = arr.index(mini) idx2 = min(arr.index(mini) + (plusCount % m), len(arr)) reach = arr[idx2 - 1] for i in range(idx1, idx2): arr.remove(arr[idx1]) cnt += reach * 2 #음수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if minusCount % m != 0: maxi = max(i for i in arr if i < 0) idx1 = arr.index(maxi) idx2 = max(arr.index(maxi) - (minusCount % m), -1) far = abs(arr[idx2 + 1]) for i in range(idx1, idx2, -1): arr.remove(arr[idx2 + 1]) cnt += far * 2 reach = max(reach, far) # 이럴 필요 없는데, 돌면서 먼 데 구하고 그 안쪽? 지우는 방식으로 했어요.. while arr: pos = getPos(arr) far = abs(arr[min(len(arr) - 1, pos + m - 1) if direction else max(0, pos - m + 1)]) for i in range(m): if not arr: break arr.remove(arr[pos]) if not direction or pos == len(arr): pos = max(pos - 1, 0) cnt += far * 2 reach = max(reach, far) print(cnt - reach)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
vector<string> <--> string 자료형을 썼을 때의 차이
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.<1. vector<string>자료형 사용>#include <bits/stdc++.h> using namespace std; //1159 - 농구 경기 int N; vector<string> name; int cnt[26]; vector<char> ret; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int flag=0; cin>>N; for(int i=0;i<N;i++){ cin>>name[i]; cnt[(int)name[i][0]-'a']++; } for(int i=0;i<26;i++){ if(cnt[i]>=5){ ret.push_back((char)i+'a'); flag=1; } } if(flag){ for(char c:ret) cout<<c; return 0; } cout<<"PREDAJA"<<'\n'; return 0; } <2. string 자료형 사용>#include <bits/stdc++.h> using namespace std; //1159 - 농구 경기 int N; string name; int cnt[26]; vector<char> ret; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int flag=0; cin>>N; for(int i=0;i<N;i++){ cin>>name; cnt[(int)name[0]-'a']++; } for(int i=0;i<26;i++){ if(cnt[i]>=5){ ret.push_back((char)i+'a'); flag=1; } } if(flag){ for(char c:ret) cout<<c; return 0; } cout<<"PREDAJA"<<'\n'; return 0; 다시 풀다 보니 이름을 계속 저장할 필요가 없음을 인지하여 string 자료형인 하나의 변수로 계속 초기화하도록 수정하였습니다. 하지만 첫 번째 코드가 실행되지 않는 명확한 이유를 잘 모르겠습니다. 설명해주시면 정말 감사하겠습니다. 좋은 강의 항상 감사드립니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2차원 dp 11:45분에서 하상좌우 순서에 의미가 있나요?
상하좌우 순서 고쳐주셨다고 하셔서 그냥 순서 바꿔서 해봤더니 값이 다르게 나오네요.. 이해가 안됩니다 센세 ㅠㅠ흑흑
-
미해결김영한의 실전 자바 - 중급 2편
질문
이런 문제들 너무 너무 좋은데, 혹시 영한님이 직접 손수 만드신 문제인가요?아니면 이런 문제들 풀 수 있는 전문적인 사이트라던가 참고할수 있는 링크나 문제집이나 강의 추천해주시면 감사드리겠습니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
stack의 괄호문자제거 문제, 질문 이제안보시나요..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 문제 조건에서 소괄호 사이의 존재하는 문자는 제거한다고 했는데 만약 소괄호 쌍이 안맞고 '(' 나 ')'가 남게되는 경우는 감안을 안해도되는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 화면이 안나와서 질문드립니다!
0주차 커리 큘럼에서 알고리즘 교안 공부하는 방법 [필독] 문제 풀 때 주의할 점2분[필독] 질문하는 방법3분[필수개념] 재귀함수(recursion) 이 강의들은 화면 없이 듣는게 맞는걸까요?다른 강의들은 화면이 잘 나옵니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-Q 질문있습니다 :)
안녕하세요 선생님 🙂 이해가 되지 않는 부분이 있어서 질문 글 올립니다. 문제를 보니, 일단 완전탐색과 visited배열의 가중치를 증가시키는 방법이 떠올랐습니다. 완전탐색은 DFS로 구현(BFS는 복잡함)visited배열의 가중치를 증가시키려면 BFS를 사용위의 2번 방법은 완탐을 사용하려면 불가능한 방법이기 때문에 함수에 cnt라는 int형 파라미터를 추가하여 풀이를 해보았습니다. 하지만 무언가에 막혀서 선생님 강의를 틀었는데요, 완탐을 사용하시면서 visited배열의 가중치를 증가시키시더라구요. 그동안 배웠던대로라면 이건 불가능한 방법이 아닌가요? 너무 헷갈립니다.. 팁 좀 주시면 감사하겠습니다!!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
왜둘맞..?
안녕하세요 선생님.처음 문제를 풀 때 투포인터로 문제를 풀었습니다.(아래는 첫번째 풀이)http://boj.kr/3a10ce5dba1d4b2ba3ff506e08ea07cc그런데 생각을 해보니, 2 2 2 7 7 7 이렇게 나오는 경우도 있지않을까? 싶어서map을 사용해 다시 풀었습니다.(아래는 두번째 풀이)http://boj.kr/683ffbaa42d741caa47966d54cd814a1투포인터로 짠 첫번째 로직은 2 2 2 7 7 7 의 경우 답이 3개가 나옵니다. 그리고 map으로 짠 경우, 9개가 나옵니다.2가 3개, 7이 3개 가 있으니까 3 * 3 = 9 이렇게 나옵니다. 이렇게 두 풀이가 하나의 입력에 대해 답이 다른데 두 풀이 모두 정답으로 나옵니다.제가 문제를 잘못이해한 것인지 왜 답이 다르게 나오는 두 풀이가 다 정답이 되는지 모르겠습니다 ㅜ..
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
공부 방법
-안녕하세요 선생님 강의 잘 듣고 있습니다.제가 구현이 너무 안되어서....이 강의를 듣게 되었습니다..혼자 코드업 문제 등을 풀어보면 해결이 안되는 문제는 몇일씩 고민해도 시간만 가고 해결이 안되더라구요...그래서 방법을 한번 바꿔볼까 해서 이 강의를 듣게 되었어요..선생님 강의를 전체 한번 쭉 다 듣고 다시 개인적으로 공부하는 방법이 어떤가 싶어 문의드립니다..알고리즘을 떠올리기가 힘듭니다...ㅜ지금 DFS문제부터 듣고 있습니다.. 뒷 부분 강의부터 먼저 접해보면 앞부분의 문제는 좀더 쉽게 해결되지 않을까 해서요....;; 공부 방법에 대해 선생님께 조언을 좀 구하고저 합니다... 작성된 코드는 대부분 다 이해를 합니다..구현이 너무나 어렵습니다....ㅠㅠ조언 부탁드립니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
16234 로직에 관해 질문 있습니다.
82161918번 소스 코드 (acmicpc.net)우선 설명해주신 로직은 dfs와 인구이동을 한버에 하시는 것 같습니다.제 로직은 while(true) 연합생성 연합생성이 않되면 break; 연합이 생성되면 인구 이동입니다.처음에 시도했을 때, 시간초과가 나서, BFS,DFS 모두 구현해보았는데, 어느 부분에서 더 줄일 수 있는 지 궁금합니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
기본 3강부터 막혀 멍청해서 화가납니다 ㅠㅠ
제곱수의 합문제요..6일 경우 제곱이 되려면 루트6밖에 안되는데왜 2가 2로 떨어지는 약수의 개수로 카운팅되는지 이해를 못하겠네요…또 3의 제곱 5의 제곱은 왜 고려안하는지도…( 이미 이해 다 됐다고 가정해서 말씀하신건지도 모르겠습니다.ㅠㅠ )바보도 알고리즘 천재로 만들어주신다고 들어서 잘 알려주시면 감사드리겠습니다 ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 질문 드립니다!
교안 질문 드립니다!Fill()파트를 공부 하다가#include <bits/stdc++.h> using namespace std; int b[10][10]; int main(){ int *ptr = &b[0][0]; int size = 10 * 10; for(int i = 0; i < size; ++i) { *(ptr + i) = 1; } for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ cout << b[0][0] << " "; } cout << "\n"; } return 0; }이 코드에서 궁금한것이 생겼습니다. 원래대로라면 b[i][j]가 맞을것 같은대 신기하게도 이 코드를 출력 해도 1이 100번 출력이 되어서 이 부분이 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
홀수인경우 처리방식에 궁금점이 있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.해당 강의 홀수일때 처리하는 아래 코드에서if (b % 2) ret = (ret * a) % c;(ret * a) % c 가 아니라 (ret * a%c) % c가 맞다고 생각 하였습니다.예를 들어서 2^5가 들어간다고 생각해보면 모듈러 계산 공식에 맞춰서(2^5)%c = (2^4%c * 2%c)%c 로 계산이 되기때문에 (ret * a%c) % c 라고 생각하였는데, 혹시 이 부분에서 제가 개념을 잘못 파악하고있는건지 궁금합니다
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
안녕하세요. 강사님께서 제공해주신 코드로 다른 문제를 풀려고 합니다.
안녕하세요. 강사님께서 제공해주신 이분탐색 1번 2번 코드중 2번 코드로 새로운 문제를 풀려고 합니다.1번 코드(left와 right 설정)으로는 잘 풀리는데 2번 코드(cur과 step 설정)로는 잘 안풀리네요. 백준 2343번 기타문제를 강사님께서 제공해주신 코드로 풀려고 아래와 같이 코드를 짜보았습니다. 하지만 원하는 결과를 얻지 못했는데요. 어떤 부분이 잘못된건지 알려주실 수 있을까요?? nums, blue_nums = map(int, input().split())bluelay_length = list(map(int, input().split())) def check(length): count = 1 current_length = 0 for i in bluelay_length: if current_length + i <= length: current_length += i else: current_length = i count += 1 return count == blue_nums cur = 0steps = 10000+1 while steps > 0: while cur + steps <= 10000+1 and check(cur + steps): cur += steps steps //= 2 print(cur) 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O 질문있습니다 :)
안녕하세요 선생님 🙂 이 문제를 이해하고 직접 풀기까지 많은 시간이 소요된 것 같습니다. 그래도 덕분에 업그레이드가 많이 된 것 같네요 ㅎㅎ 다름이 아니라, go함수 안에 있는이중 for문의 for(int j = 1; j < n; j++)에서 범위가 왜 j < n이 정답이 되는지 잘 모르겠습니다. j <= n을 하여 세로선(가로인덱스)의 마지막 부분도 체크를 해줘야 할텐데 체크를 안해도 정답으로 인정되는게 이해가 안됩니다;; 알려주시면 감사하겠습니다 :)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-i 포켓문 문제 시간초과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이와 같이 코드를 작성하였는데 시간 초과가 나는데 왜 그런 것인가요?일부러 시간복잡도가 m*n이 되지 않게 하려고 맵 2개를 만들어서, o(n)이 최고 시간복잡도가 되게끔 설계하였습니다.#include <bits/stdc++.h> using namespace std; int n; // 포켓몬의 수 int m; // 문제 수 map<int, string> poketmonsByNumber; map<string,int> poketmonsByName; vector<string>searchId; string name; string question; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cin>> n >> m; for(int i=0; i<n; i++){ cin>>name; poketmonsByNumber[i+1]=name; poketmonsByName[name]=i+1; } for(int i=0; i<m; i++){ cin>>question; if (isdigit(question[0])) { int id = stoi(question); searchId.push_back(poketmonsByNumber[id]); } else{ string id=to_string(poketmonsByName[question]); searchId.push_back(id); } }; for(auto id : searchId) { cout<<id<<endl; } return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요 선생님. 반례를 찾지 못해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님.입력받은 문자열을 map을 사용해 알파벳 당 개수로 저장했습니다.홀수가 2개 이상이면 sorry를 출력하도록 했습니다.홀수가 1개인 경우, 홀수 알파벳의 개수 -1 을 하고 , 홀수 알파벳을 저장했습니다.그 후 다시 루프를 돌면서각 알파벳 개수의 절반만큼 오름차순으로 문자열을 만들고, 미리 저장해둔 홀수 알파벳 1개를 더한 뒤 , 오름차순 문자열을 뒤집어서 더하는 방식으로 코드를 구현했습니다.이것저것 다 넣어서 해봤지만 반례를 찾지 못하고있습니다 ㅜ http://boj.kr/86a69d1d5ce647b09c5a121b0c9e5ea9
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
맞왜틀 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 아래와 같이 코드를 작성했는데요, 제가 짜낼 수 있는 예외 케이스들을 넣어서 돌려봐도 잘 돌아가는데 왜 틀렸다고 나오는지 모르겠네요 ㅜ https://www.acmicpc.net/source/82101102
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-B질문 있습니다
http://boj.kr/7c3f26d3241248269e0dafaccddfdc0e안녕하세요 큰돌 선생님. 이번 문제를 탑다운 방식으로 풀어 봤는데 어느 부분이 틀린지 모르겠습니다... 그리고 dp배열을 0이 아닌 -1로 초기화 하는 이유가 0이 답의 범위에 있다라고 다른 질문에서 얘기해 주셨었는데 0이 답의 범위라는게 문제의 답이 0이 나올 수 있다는 건지 dp배열 안의 값이 0이 될 수 있다는 의미인지 잘 모르겠습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-k 교수가 된 현우 런타임 에러
안녕하세요. 강의를 보기 전에 문제를 먼저 풀어보았습니다.5!를 생각해보면 5*4*3*2*1 인데, 5가 나오기 위해선 반드시 2와 4가 나와야하고, 따라서 5의 개수가 무조건 적다고 생각했습니다. 그래서 10억 이하의 모든 5의승수를 저장해놓는 배열을 만들어두고, 1~n 사이의 수 중 5^k로 나누어 떨어지는 수가 발견되면 cnt에 k를 더하도록 만들었는데, runtime error가 발생했습니다. 에러 코드는 divide by zero 가 나오는데, 나눗셈을 사용하지 않는데 이런 에러가 왜 발생하는걸까요? http://boj.kr/f55433f25a704564a5d253bad99cd7ac