묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[예시질문] 마지막 예시 코드 질문 있습니다.
#include <bits/stdc++.h> using namespace std; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; // bool m[3][3]; bool visited[3][3]; bool m[3][3] = { 1, 0, 1, 1, 0, 1, 0, 1, 1 }; // void visit(int x, int y) // { // cout << '(' << x << ", " << y << ')' << '\n'; // visited[x][y] = true; // for(int i = 0; i < 4; i++) // { // int nx = x + dx[i]; // int ny = y + dy[i]; // if(nx < 0 || nx >= 3 || ny < 0 || ny >= 3) // continue; // else // if(!visited[nx][ny] && m[nx][ny]) // visit(nx, ny); // } // } int main(void) { for(int i = 0; i < 3; i++) for(int j = 0; j < 3; j++) for(int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if(nx < 0 || nx >= 3 || ny <0 || ny >= 3) continue; else if(!visited[nx][ny] && m[nx][ny]) { cout << '(' << nx << ", " << ny << ')' << '\n'; visited[nx][ny] = true; } } // for(int i = 0; i < 3; i++) // for(int j = 0; j < 3; j++) // cin >> m[i][j]; // visit(0, 0); return 0; }강의를 보고 제가 작성한 코드입니다. 강의 내Q. 3 * 3 맵을 입력받아야 함. 이 맵은 1과 0으로 이루어져있고 {0, 0}은 무조건 1임을 보장한다. {0, 0}부터 4방향을 기준으로 한칸씩 탐색해나가며 방문한 정점은 다시 방문하지 않으며 방문하는 좌표를 출력하는 코드. 0은 갈 수 없는 지역. 1은 갈 수 있는 지역을 구현하시오.라는 문제에 따라서 해당 코드로 구현했습니다. 해당 코드의 결과는(1, 0) (0, 2) (0, 0) (1, 2) (2, 1) (2, 2) 정확한 의도와는 다르게 구현된 부분( (0, 0) 부터 가는게 아니라서 출력 순서가 바뀜) 이 있지만 문제에 맞게 작성을 했는데요. 강사님이 작성하신 코드를 그대로 복붙한 결과, 강사님이 작성하신 코드 참조해서 작성한 코드 결과가 모두(0, 0) (1, 0)이렇게 결과가 나왔는데잘못된게 아닌가 싶어서 질문 드립니다. 혹시 제가 뭔가 빼먹었나요.현재까지 본 영상으로 DFS, BFS 에서 사용되는 핵심 부분의 일부를 빌드업으로써 설명을 잘해주셔서 이해가 빨리 됩니다. 근데 아무래도 왜 저런 결과가 나오는지 이해가 잘 안됩니다. 재귀 호출로 인해서 분명 다 조회가 될텐데 말이죠. 강의 잘 듣고 있습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준2178 제출 메모리 초과
http://boj.kr/9e4dc18b53ee4679be7d8a7e07c45439안녕하세요 선생님 수업 잘 듣고있습니다! 다름이 아니라 위의 코드는 제가 쓴코드인데 선생님 코드와 비교해보았을때 거의 90%이상이 일치하며 논리또한 거의 대부분이 일치한다고 느끼는데 제 코드에서 메모리초과가 발생합니다. 도저히 이유를 알 수가 없어서 이렇게 질문 올립니다 . 감사합니다!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
재귀함수 순열 질문있습니다.
순열을 재귀함수로 호출하는 과정에서 depth의 역할에 대해 잘 이해를 못 하겠습니다.그리고 for문안에서 순서의 흐름이 이해가 잘 가지 않습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[4-K] 반례 찾기가 어렵습니다.. ! ㅠ
#include <bits/stdc++.h> using namespace std; int T, N, M, A, B; // 체크해야할 그래프의 수, node 수, edge 수 vector<int> graph[1004]; int vis[1004]; int dfs(int here){ vis[here] = 1; // 방문 int ret = 1; if(graph[here].size()){ for(auto i : graph[here]){ if(vis[i]) continue; ret += dfs(i); } } return ret; } bool isTree(){ if(dfs(1) != N || M != (N-1)) return false; // Vertex = Edge - 1 return true; } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> T; while(T--){ cin >> N >> M; // 1부터 N까지의 노드 for(int i = 0 ; i < M ; i++){ cin >> A >> B; graph[A].push_back(B); graph[B].push_back(A); } if(isTree()){ cout << "tree"; }else{ cout << "graph"; }; for(int i = 0 ; i <= 1004 ; i++) graph[i].clear(); // for(auto i : graph) {if(i.size()) i.clear();} // 초기화. memset(vis, 0, sizeof(vis)); // T개의 그래프 개수가 주어지고, 각각의 그래프에 대해 N, M이 주어짐. // M개의 라인 동안 A,B 가 주어짐. } } // 트리의 조건. // 0) 모든 노드에 접근가능. ~ isTree() => 모든 노드에 접근해보는 dfs 만약 아니라면? -> 나가리. (개수가 N이 아니면) // Vertex = Edge - 1 같은 방식으로 푼것 같은데 아무리 해도 반례를 찾을 수가 없습니다 ㅠㅠ테스트케이스는 다 통과했는데, 1%에서 틀렸습니다가 뜨네요.. 항상 풀던 int 반환형 dfs로 했는데 왜 안되는지 이해가 안되네요 ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
인접행렬을 기반으로 탐색하기 블로그 정답코드
안녕하세요 선생님 수업 잘 듣고있습니다. http://boj.kr/f04608a73b92415eb201ffc29830dcf1위 코드는 블로그 2주차 인접행렬을 기반으로 탐색하기의 정답코드입니다. 선생님께서는 a[1][2] = 1; a[1][3] = 1; a[3][4] = 1; a[2][1] = 1; a[3][1] = 1; a[4][3] = 1;부분을 main함수 안에다 설정해놓으셨는데 전역변수가 아니라 main함수안에 설정해 놓으신 이유가 궁금합니다.또 저 위의 main함수 안에 설정된 값들이 어떻게 go함수가 메인함수보다 더 위에 있음에도 불구하고 go함수에서 참조가 가능한지도 궁금합니다. 강의 잘 듣고 있습니다 감사합니다!
-
해결됨홍정모의 따라하며 배우는 C++
1.14 #define
10:20 정도에#define LIKE_APPLEint main(){#ifdef LIKE_APPLEcout << "Apple" << endl;}이 상황일 때define은 뒤의 macro를 그 뒤의 걸로 교체해준다고 했는데#define LIKE_APPLE 뒤에는 아무것도 없으니 #ifdef 뒤의 LIKE_APPLE을 빈칸으로 교체해주는 건가?NO!#ifdef LIKE_APPLE 같이 preprocessor 라인 안에서는 교체 안 한다.라고 하셨습니다.그럼 만약, preprocessor 라인이 아니라 cout << LIKE_APPLE; 같이 평범한 라인일 경우 빈칸이 출력되나요?
-
해결됨홍정모의 따라하며 배우는 C++
1.14 Conditional Compilation을 많이 쓰는 경우
선생님께서 8:50 정도에,Conditional Compilation을 많이 쓸 때는 이 프로그램이 build 시작하기 전에 윈도우즈든지 리눅스든지 좀 알고 시작하자 이럴 때라고 하셨습니다...그런데 이게 무슨 뜻인지 잘 모르겠는데 혹시 구체적으로 설명해주실 수 있으실까요?ㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C++
1.14 algorithm
선생님께서std 안에 max가 있고 max는 algorithm이라는 라이브러리 안에 있다고 하셨습니다. 여기서 namespace std랑 라이브러리가 좀 헷갈리기 시작했습니다...전 현재 어떻게 이해한 상태이냐면,지난 강의에서 선생님께서 iostream을 open document를 통해 namespace가 있고 그와함께 cin, cout 등이 있다는 것을 보여주셨습니다.그래서 iostream library > namespace standard(std)> cin, cout으로 이해했습니다.그런데 갑자기 max는 또 algorithm이라는 라이브러리에 있는데 또 namespace standard(std) 안에 있다고 하시니 헷갈립니다...namespace standard(std)은 모든 라이브러리에 있는 것인가요? 저는 iostream 라이브러리 안에만 있는 것다고 생각했습니다....
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
정적할당과 동적할당 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 알고리즘 교안의 동적 및 정적 할당 section에서 질문입니다.재귀함수가 호출된다고 했을 때, 새로운 스택 프레임이 매번 사용되기 때문에, 함수 내의 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 않습니다.라는 내용이 있습니다. 여기서 2가지 질문이 있습니다.프레임이란 os에서 언급되는 데이터 단위인 프레임을 말하는 건지?파이썬으로 치자면 self. 로 정의된 인스턴스 변수를 말하는 건지 아니면 c++만의 다른 개념이 있는 건가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
% 연산자 이용한 풀이
http://boj.kr/2044c9818df1435bb91fa7b228532614조금 복잡하게 이런식으로 풀었는데 테스트케이스는 통과했는데 정답은 못받았습니다. 혹시 어떤부분이 틀린걸까요?여러가지 테스트케이스를 또 생각해봤는데 잘 모르겠습니다..
-
미해결홍정모의 따라하며 배우는 C++
1.13 MySpace1::InnerSpace::my_function();에 관하여
namespace MySpace1{ namespace InnerSpace { int my_function() { return 0; } }}using namespace std;int main(){ using namespace MySpace1; MySpace1::InnerSpace::my_function(); return 0;}여기서 선생님께서 main function에서 my_function()에 접근하려면 MySpace1::InnerSpace::my_function();으로 적어야 한다고 설명해주셨습니다.여기까지는 확실하게 이해했습니다.그런데 여기서 1가지 의문점이 생겼습니다.main function에서 using namespace MySpace1;을 적어주었기 때문에 MySpace1::InnerSpace::my_function();이 아니라InnerSpace::my_function();으로 적어야 하지 않나요?어떤 게 맞는 건가요?
-
미해결홍정모의 따라하며 배우는 C++
1.13 using namespace MySpace1;에 관하여
using namespace std;int main(){ using namespace MySpace1; doSomething (3, 4); //cout << MySpace1: :doSomething (3, 4) << endl; //cout << MySpace2: :doSomething (3, 4) << endl; return 0;}안녕하세요? 선생님께서 main function 안에 using namespace MySpace1; 을 적어두면 MySpace1: :doSomething (3, 4)로 적을 필요 없이 그냥 doSomething (3, 4);로 적어도 된다고 설명해주셨습니다.여기까지는 확실하게 이해했습니다.그런데 MySpace2 안에 들어있는 doSomething의 경우, MySpace1 안에 없기 때문에 사용하려면 MySpace2: :doSomething (3, 4) 식으로 적어야 한다고 생각하는데 혹시 이것 외에도 MySpace2 안에 들어있는 doSomething을 쓸 수 있는 방법이 있나요? int main(){ using namespace MySpace1; using namespace MySpace2; doSomething (3, 4); doSomething (3, 4);return 0;}이렇게 적으면 안되는 거죠?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
if(조건문) 의미 해석 질문
안녕하세요 강사님 이건 뭔가 너무당연해서 저 말고는 다 아는 분위기라 질문하기 좀 그렇지만 명확히 알고싶어 질문드려요ㅠㅠ일단 제 생각에 1-K 답안의 if(cnt[i])의 의미가 강의에서 스치듯 언급하셨는데 "cnt[i]의 값이 있으면, 존재하면" 으로 해석되는것 같아요그리고 저번에 1-E 답안에서도 if(ret.size())로 이부분이 한번 등장했었는데, 이때도 강의내용 들으면서 대충 "ret의 사이즈가 있으면, 존재하면"의 의미구나 하고 넘어갔었던 적이 있거든요.음 저는 코딩 경험이 적어서 if(조건문)의 조건문 부분에 항상 (a > 12)라던가 (a == 0) 이런식으로 연산자가 들어간 형태로만 넣어왔는데, 제가 위에 적은 1-K, 1-E 두가지 경우는 조건문 부분에 연산자 하나 없이 한개의 항만 달랑 들어가있는데, 이게 저는 처음보는 형태라서Q1. 저런 형태가 나올때마다 제 생각대로 "~이 존재하면"으로 해석하는게 맞는지와, Q2. 혹시나 더 긴 구문이 저렇게 짧게 함축된 것이라면 어떤과정을 거쳐서 저렇게 해석하게 되는지가 궁금합니다 (마치 긴 for문을 간단하게 범위기반for루프로 나타낸것처럼, 이것도 그런 과정이 혹시나 있다면 알고싶어요...ㅠ)제가 생각해도 걍 그런갑다 해도 될 포인트같긴 한데,,묘하게 거슬려서요ㅠㅠ바쁘신데 항상 감사합니다
-
미해결홍정모의 따라하며 배우는 C++
1.12 헤더가드에 관하여
선생님께서 add.h 파일에#ifndef MY_ADD#define MY_ADDint add(int x, int y){ return x + y;}#endif이렇게 #ifndef, #define, #endif 를 추가하는 것을 가르쳐주셨습니다.이것들의 뜻은MY_ADD가 이미 정의되었다면, 아래에 있는 부분들을 정의하지 마라.include가 이미 되어있다면, 아래에 있는 부분들을 다시 include 하지 마라.라고 설명하셨습니다.여기서 살짝 헷갈리는 부분들이 있습니다.MY_ADD는 정확히 어떤 것을 의미하는 것일까요? add.h 파일 자체를 의미하는 건가요? 헤더가드의 뜻이 include가 이미 되어있다면, 아래에 있는 부분들을 다시 include 하지 말라는 뜻이라고 하셨는데 include의 대상은 이 헤더가드가 입력되어 있는 파일(여기서는 add.h)를 의미하는 건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1987 알파벳 백트래킹 시도
안녕하세요 큰돌님~!http://boj.kr/314427359c31448dab02e36c370858d2위 코드에서 9번째 if문만 빼면 통과는 되었습니다. 하지만 시간이 좀 오래 걸리는 것 같아서 생각한 것이 어차피 string s의 최대 size는 26이니까(모두 다른 알파벳이 다 들어갔다는 가정) 정답 변수인 ret이 26일 경우 항상 dfs 함수를 종료시키는 조건문을 넣었는데요 위 조건식만 넣으면 out of range 에러가 나는데 이유가 무엇일까요...?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 모범답안 while(t--)
안녕하세요 강사님 모범답안 while(t--) 여기서 t--가 무슨뜻인가요? 와일문은 조건이 참일때까지 반복한다고 알고있는데 조건에 t--는 처음봐서요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[필수개념] 조합 관련 문의
안녕하세요. 조합 코드 관련하여 문의드립니다.아래 코드대로 출력했을 때0 1 20 1 30 1 40 2 30 2 40 3 41 2 31 2 41 3 42 3 4이와 같이 나옵니다.combi 함수에서 for문을 for(int i=start+1; i<=n; i++) 로 변경하면 '5'도 출력되는데 .. 변경하는 게 맞을까요? 답변 부탁드려요..#include <bits/stdc++.h>using namespace std;int n=5, k=3, a[5]={1,2,3,4,5};void print(vector<int> b){ for(int i:b)cout << i << " "; cout << '\n';}void combi(int start, vector<int> b){ if(b.size()==k){ print(b); return ; } for(int i=start+1; i<n;i++){ b.push_back(i); combi(i,b); b.pop_back(); } return ;}int main (){ vector<int> b; combi(-1,b); return 0;}
-
해결됨홍정모의 따라하며 배우는 C++
저도 저도 리뷰요!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 일케해도 문제 없죠?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
16637번 문제 질문
안녕하세요 큰돌님 !go 함수 내부에 있는 두 번째 if문 조건식에서 if(here <= num.size() - 3) 과 if(here + 2 <= num.size() - 1)는 똑같은 조건식 아닌가요? 첫 번째 조건식은 78%쯤 out of bounds에러가 발생하여 여쭤봅니다 !if(idx <= num_v.size() - 3){ int temp = calculate(num_v[idx+1],oper_v[idx+1],num_v[idx + 2]); go(idx + 2, calculate(sum, oper_v[idx], temp)); }http://boj.kr/bb244381081f4c6dbdfcaa6fdb8ea45c
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.최대시간복잡도가 10억이고 제한시간이 5초인데 강의해주신 코드로 어떻게 통과가 되는건지 궁금합니다! 혹시 알려주신 방법외에 원래는 다른 방법으로 풀어야 하는건가요?