묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Do it! 알고리즘 코딩테스트 with C++
문제 8번 질문드립니
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int N; cin >> N; vector<int> save(N + 1 , 0); for (int i = 1; i <= N; i++) { cin >> save[i]; } sort(save.begin(), save.end()); int result = 0; for (int k = 1; k <= N; k++) { int s = 1; int e = N; while (s < e && s >= 1 && e <= N) { int temp = save[s] + save[e]; if (temp < save[k]) { s++; } else if (temp > save[k]) { e--; } else { //만약 s와 e가 k와 같아지면 안됨 if (s != k && e != k) { result++; break; } else if (s == k) s++; else if (e == k) e--; } } } cout << result << "\n";} 제가 다음과 같이 돌렸을 때 틀렸습니다라고 나오는데, 벡터에 저장할 때 0부터 저장하면 정답이라고 나오는 이유를 모르겠습니다
-
해결됨[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
hash_map, map 질문 드립니다.
hash_map 같은 경우 그럼 큰 공간을 미리 할당해 놓고 할당된 공간 안에 key값을 기준으로 value 값을 채워 넣어 준다.그럼 예를 들면 map.reserve(100);과 같은 개념일까요??메모리를 희생하여 CPU 연산 속도를 올린다는 의미가reserve : 큰 공간을 미리 할당(메모리 희생)이사비용 감소 (미리 큰 공간을 할당하여 사용하므로 new ...() 과 같은 동작을 안해도 되므로) -> CPU 연산 속도 증가? 이러한 의미로 이해했는데 제가 이해한바가 맞는지가 궁금합니다.key값을 알면 빠르게 찾을 수 있다. -> map은 이진 탐색 O(logN)으로 찾지만, hash_map은 hm[key] O(1) -> m[key]도 가능하지 않나요? 그럼 map도 키 값을 알면 O(1) 즉 빠르게 찾을 수 있게 되는 건가요?hash 기법을 이용해서 key값을 추출하는 이유가 보안 때문인건가요?메모리를 늘릴 수 록 성능이 좋아지는 의미가 키 값이 겹쳐질 확률이 적어져서 성능이 좋아지는 건가요? -> 키 값이 겹치면 빈 공간을 찾아 가야하니
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p94 2차원배열
vector v3[10];2차열 배열을 만드는 방법중에서 위와같은 코드로 2차열배열을 만들수 있다고 하셨습니다. 밑의 그림도 참고를 해봤는데 이해가 가지않습니다.V3[10]을 하게 되면 1차원에 10개의 공간만 생기는것이 아닌가요??
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코드 순서 차이
1012번 문제 이전에 dfs. bfs 강의 부분에서 제가 기억하기로는 ret++; dfs(i, j); 이렇게 써서 제출 후 정답은 맞았습니다만...이 두 코드의 위치가 바뀌어도 상관없는 걸로 아는데제가 알고 있는 것이 맞나요?아니면 혹시 코테 볼 때는 dfs(i, j); ret++; 이렇게 해야만 하나요???
-
미해결[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
안녕하세요 몇가지 질문이 있습니다.
안녕하세요 좋은 강의 잘 듣고있습니다. 몇가지 질문이 있어 문의드립니다.데코레이터로 감싸진 함수 호출강의를 다볼때쯤 되어 코드를 보니 blog_abtest.py와 blog.py에서 데코레이터로 감싸진 함수들의 호출은 @login_manager.user_loader -> 해당 데코레이터 부분에서 된다고 보면 될까요??수업시간에 말씀해주셨을텐데 제가 잘 이해를 못한것 같네요...예를들어, 아래 이미지의 함수들의 경우 선언과 동시에 호출을 하는 것일까요?2. C++, C#으로 구현된 서비스 SDK와의 연계제가 타전공으로서 웹은 처음으로 강사님을 통해 배우고 있는데 실무에서 C++ 혹은 C#으로 구현된 SDK에서 제공하는 '지도(map)'을 가시화하는 웹서버를 개발해야 됩니다. 본 강의에서 학습한 FLASK에 해당 SDK를 연동해서 홈페이지에서 지도를 불러올 방법이 있을까요?? 마지막으로, 정부쪽 웹개발은 FLASK를 사용하지 못하나요??국가 과제를 수행하고 있는데 정부에서 쓰는 웹 프레임워크가 따로 있다고 들었습니다.(자바와 유사한 전자정부~)국가기관에 웹서비스를 배포하고자 할때는 파이썬 기반의 FLASK를 사용하지는 못할까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재 p90 erase() 이터레이터
1.v.erase(v.begin(), v.begin() + 3); 강의교재를 보시면 위의 코드가 나오는데요 저 코드를 실행한 결과 1~9까지의 숫자중에서 1~3까지의 숫자가 사라졌는데요 제가 해석한 바로는 앞의 begin을 으로 부터 +3이니깐 주소가 3칸 옮겨간거고 그리고 범위가 ()이므로 원래는 1~4이지만 4를 제외하고 1~3만 제거가 되는건가요? 2.auto a = find(v.begin(), v.end(), 100);같은 페이지에 있는 코드입니다.100을 찾아서 인덱스값을 a에 넣어야할것같은데요 9보다 그니깐 인덱스 값은 6이 되어야 하는것이아닌가요>?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
안녕하세요 제가맞게 생각하는건지 모르겠습니다
항상 화면에서 보이는것은 원점을 기준으로 z축방향을 바라보고있기떄문에 사실상 카메라라는것은 존재하지않고 모든 물체에다가 뷰변환을 적용시켜서 , 카메라를 움직이는게 아닌 물체를 원점으로 끌고와서 그려주는것이 맞는건가요 ?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 재귀함수 관련 질문입니다.
go(here + 1); a[here] = ~a[here]; go(here + 1);go함수 내에서 강사님이 하신대로 위와 같이 호출하면 기저사례에 8가지 경우의 수(3행기준)가 모두 나온다는 것을 재귀함수 트리를 그려서 확인을 했을뿐 이해가 가지 않습니다..go(here + 1); a[here] = ~a[here]; go(here + 1); a[here] = ~a[here]; //원복뒤집고 go함수 호출하고 그 함수가 종료되고 다시 돌아왔을 때 바뀐 배열을 다시 뒤집는 과정이 있어야 함수가 똑바로 작동할거라고 계속 생각하게 되네요. 예를 들어, {4,5,1}이 있을 때 , go(1)이 호출되고 첫번째go(2)함수가 진행되다가 함수가 종료되어서 다시 go(1)로 돌아왔을 때, {4,5,1}이 되어있어야 기저사례에서 8가지 경우가 제대로 나올텐데 왜 원복 코드없이도 8가지가 제대로 나오는지 이해가 안됩니다!!!!!!!!!
-
미해결홍정모의 따라하며 배우는 C++
강의 시간 12:45에 작성된 함수const stirng& getValue() const{...} 에 대해서 질문드립니다.
const string& getValue() const 이부분에서 함수 이름 뒤에 위치한 const는 getValue함수 내부에서 멤버 변수의 값을 변경하지 않겠다는 의미인것은 이해 할 수 있습니다. 하지만 함수이름 앞에 const string& 은 잘 이해가 가지 않습니다.string타입의 멤버 변수의 주소를 변경하지 않겟다라는 의미 인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의교재p84
cout << lower_bound(a.begin(), a.end(), 3) - a.begin() << "\n";페이지 중간을 보시면 이러한 코드가 나와있는데요 밑에 페이지에 있는 설명을 읽어보니 주소값의 차이가 2이기 때문에 2가나온다고 설명이 되어있습니다.그리고 p85를 보면 cout << &*lower_bound(a.begin(), a.end(), 3)<< "\n";이러한 코드가 나와있는데요 이 코드는 주소값을 반환하는것으로 나와있는데 맨 첫번째코드도 주소값을 반환하는것으로 알고있습니다. 두 코드의 차이는 &*가 붙어있다는뜻인데 &*기호가 붙어있어도 똑같이 주소를 나타낸다는 코드인가요?하지만 맨 처음 코드에서 -a.begin()을 해주고 나서 코드를 실행해보니깐 오류가 뜹니다..어떻게 해야할까요?
-
해결됨C개발자를 위한 최소한의 C++
문자열 필터 실습 코드 중 질문 드립니다.
안녕하세요. 강의 잘 보고 있습니다.실습 중 궁금한 것이 있어서 질문 남깁니다.CMyStringEx::onSetData 함수 내용입니다.void CMyStringEx::onSetData(const char*& param) { CMyString::onSetData(param); // 생략 if (param != nullptr) { if (strcmp(param, "멍멍이아들") == 0) { // delete [] param; param = "우리귀요미"; } } }param이 가리키고 있는 곳의 데이터가 "멍멍이아들" 문자열이면 "우리귀요미"라는 새 문자열이 담긴 주소로 바꿔주기 전에 기존 param이 가리키고 있는 곳을 delete 해줘야 메모리 누수가 발생하지 않을 것 같은데 맞나요? 만약 1번이 맞아서 delete를 한다면 CMyString::~CMyString() 소멸자가 호출될 때 문제가 발생할 것 같은데 이를 어떻게 해결하면 될까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-C 범위 관련해서 궁금한 것이 있습니다.
결국 이 문제에서 구하는 것은 " 잠기지 않은 구역의 수"이기 때문에, 입력을 받으면서 입력받은 지역 중 최대 높이를 구해서 100까지 for을 돌리지 않고 최대 높이 까지만 for을 돌려도 되지 않나요? 100까지 돌리신 이유가 궁금합니다!!제가 작성한 코드 첨부 드립니다!#include <bits/stdc++.h> using namespace std; const int n_max = 101; int dy[4] = {-1, 0, 1, 0}; int dx[4] = {0, 1, 0, -1}; int m,a[n_max][n_max],visited[n_max][n_max]; int ret = 1; // #2648: 안전 영역 // 메모 : DFS 깊이 우선선 탐색 -> component 찾기기 void dfs(int y, int x, int d) { visited[y][x] = 1; for(int i = 0; i < 4; i++) { int ny,nx; ny = y + dy[i]; nx = x + dx[i]; if(ny >= m || ny < 0 || nx >= m || ny < 0) continue; if(a[ny][nx] > d && !visited[ny][nx]) { dfs(ny, nx,d); } } } int main() { int maxHigh = 0; //비가 오지 않을 경우도 고려려 cin.tie(NULL); cout.tie(NULL); vector<int> results; //Input //1. 배열의 크기 cin >> m; //2. 2차원 배열 입력 받기 for(int i = 0; i < m ; i++) { for(int j = 0; j < m ; j++) { cin >> a[i][j]; maxHigh = a[i][j] > maxHigh ? a[i][j] : maxHigh; } } // 최대 높이 많큼 비가 왔을 때 부터 기준치를 낮춰가며 안전구역개수의 최대 지점을 구함 for(int d = 1; d <= maxHigh; d++) { //배열 초기화 fill(&visited[0][0], &visited[0][0] + n_max * n_max , 0); int cnt = 0; for(int i = 0; i < m; i++){ for(int j = 0; j < m; j++){ if(a[i][j] > d && visited[i][j] == 0) { cnt++; dfs(i,j,d); } } } //안전영역 최대 개수 갱신 ret = max(ret,cnt); } // 디버깅 /*for(int i = 0; i < m; i++){ for(int j = 0; j < m; j++){ cout << a[i][j] << ' '; } cout << '\n'; } */ cout << ret << '\n'; return 0; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-A
해설 중 예제에서 질투심이 3일 때가 답이 되는 것은 이해했습니다만,질투심이 4일 때 학생 수 5명을 충족시키지 못해 안 된다고 하셨는데, 문제 조건에 보석을 못 받는 학생이 있을 수도 있다고 나와 있어서 정답은 아닐지언정, 조건을 만족하는 케이스가 아닌가 싶습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
0주차 unique() 강의 질문
unique() 함수를 설명하실때요cout << it -v.begin() << '\n';를 쓰셨는데요여기에서 왜 it-v.begin()이라고 써주신건가요? 그냥 it만 들어가도 되는거아닌가요? it가 이터레이터를 반환한다고 했는데 그럼 it가 5가 되는거 아닌가요?코드 줄을 바꿀때 어떨때는 '\n'을 쓰시고 어떨때는 "\n"을 쓰시고 또 어떨때는 " " 을 쓰시던데 차이가 있을까요?그리고 v.erase(unique(v.begin(), v.end()), v.end());를 했는데 왜 뒤에 있는 숫자를 지워주는 코드가 되는것인가요?v.end()는 무엇을 기준으로 하는것인가요?
-
미해결홍정모의 따라하며 배우는 C++
Functor 를 쓰는 이유는 뭔가요~?
안녕하세요Functor 를 쓰는 이유는 뭔가요~?함수처럼 구현할수 있다는것 외에 장점이 궁금합니다.속도가 더 빠르다던가, 소스의 유연성이 올라간다던가?...감사합니다.
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
<<, >> 비트 연산자에 대한 설명이 맞나요?
2분 40초 쯤 나오는 >>, << 연산자에 대해서"두 개의 피연산자가 모두 정수이변 결과값은 '몫' 입니다."라고 설명되었는데, 해당 연산이 비트연산 시프트 연산과 같다면 몫이 나올 수 없지 않나요? 예를 들어서 int a = 4; // 100int b = 1; // 1int c = a >> bcout << c << endl;결과값은 2가 나오게 되니까 몫이라고 설명되는 부분이 이해가 안됩니다.
-
미해결홍정모의 따라하며 배우는 C++
질문
4:48 에 "operator<< " 를 멤버함수로 만들 수 없다고 하시고그 이유에 대해 첫번째 파라미터가 std::ostream& out 이어서 그렇다고 하셨는데, 좀더 자세하게 설명해주실수 있으실까요~?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-E 뮤탈리스크 질문입니다!
코드를 짜면서 scv가 하나라도 파괴되고 그 후에 공격하는 6가지 경우 중에 유효하지 않은 공격이 있다고 생각했습니다.예를 들어 상태값 (2,2,0)에서 {9,3,1}과{3,9,1}만 유효하고 나머지 공격들은 유효하지않다고 판단했습니다. 한가지 예로{1,93,9}인 경우에 파괴된 scv를 먼저 공격하는게 말이 안된다고 생각했습니다.근데 이런 생각을 할 필요가 없는게 어차피 유효하지 않은 공격에서는 최단거리가 나올수 없기 때문에 구별하는 코드를 넣을 필요가 없다고 결론내렸는데 이게 맞는 생각인가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
원탐과 원복
강의 듣고 DFS랑 무슨 차이인지 한번에 정리가 안되어 글 남겨봅니다..DFS는 경로에 대해 완전 탐색하는 것은 맞으나 그 경로의 모든 경우의 수를 탐색하는 것은 아니다.왜냐하면 앞서 지나간 자리에는 visited가 걸려있으므로 목적지를 찍은 후 재귀로 중간 부분으로 돌아온다면 다른 경로로 진입했을 시 visited가 걸려있을 수 있고 어쩌면 목적지에 도달할 수 없을 수도 있다.완탐과 원복에서는 목적지까지 도달한 후 왔던 경로에 대해 방문 처리를 원복하기 때문에 목적지로 도달하는 모든 경로의 경우의 수를 가져갈 수 있다.따라서 코스트가 더 많이 요구되는 것은 완탐과 원복하는 것이며,즉 단순히 원하는 목적지만을 탐색하는 것을 목표하고자 한다면 DFS. 모든 경우의 수를 확인하여 최소, 최대 값을 원한다면 완탐과 원복을 사용하자.라고 이해했는데 뭔가 잘못 이해한 것 같습니다.하지만 그걸 몰라서 질문을 잘 못하겠네요.. 답변 주신다면 감사하겠습니다.
-
해결됨C개발자를 위한 최소한의 C++
접근제어와 관련한 질문입니다.
안녕하세요! 새해 복많이 받으십시오. 접근제어와 관련하여 강의내용 복습하며 생각해보다가 궁금한 점이 있어서 질문 남깁니다. C언어 클래스에서 private영역에 대해 접근제어에 대해직접 부르는 것만 막는 것인지클래스에 대한 포인터를 통해 접근제어까지 막는 것인지또는 메모리상의 주소를 알아내서 포인터로 변수로 직접 접근하는 경우(...)이 다음 디스포인터영상에서 였나 2번까지는 막고 있는 것을 보여주셨던 것이 기억나는데,3번은 과연 뚫리지 않을까... 생각이 들어서 그렇습니다. 진짜로 묻고 싶은 이유는,사실은 접근제어 라는 게 C++ 프로그래밍 문법상의 규칙으로 컴파일 타임에서 관리할 뿐, '런타임에서는 (C++에서 정해졌었던 문법이고 뭐고;)이걸 죄다 걸러내고 남은 기계어로만 돌아간다' 라고 이해해도 되는가 입니다.(CS지식이 일천한 상태에서 드리는 뇌피셜이라...^^;) 감사합니다.