inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

포인터 질문있습니다.

미해결

홍정모의 따라하며 배우는 C++

안녕하세요, 아래 두 코드가 동일하게 작동해야 한다고 생각했는데, 1이 틀린 이유가 궁금합니다. 1. typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } 2. void bar(const int* ptr) { int val = 1; ptr = &val; } 1 full code #include <iostream> using namespace std; typedef int* pint; void bar2(const pint ptr) { int val = 1; ptr = &val; } int main() { int length2 = 2; pint ptr2 = &length2; bar2(ptr2); }

  • c++
yahoo 댓글 1 좋아요 2 조회수 346

2-A 맞왜틀

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요. 선생님 ㅎㅎ 수업 잘 듣고 있습니다. 수업에서 알려주신 visited 배열의 값들을 증가시키면서 depth를 세는 방법 말고, 구조체를 정의해서 문제를 풀어봤는데요? 이게 어떤 방법은 틀리고 어떤 방법은 맞아서.. 어디서 차이가 나는지 궁금해서 질문드립니다. <맞은 코드> http://boj.kr/646d439f862e419ab3a865fdd7b1551b 일단 큐에 현재 노드에서 갈 수 있는 노드(4방향)를 모두 넣고, 이후에 조건으로 노드를 선별하고, 혹시나 해서 아래와 같은 탈출 조건을 추가했습니다. if (row == m - 1 && col == n - 1) { res = depth; break; } <틀린 코드> http://boj.kr/516fe108a71c492e8c1967455f7222a1 이번에는 큐에 넣기 전 예상되는 노드를 조건문을 통해서 선별하고 큐에 넣습니다. 제 생각에는 이 코드가 큐에 들어가는 노드의 개수가 적어서 속도가 빠를 것 같은데, 메모리 초과가 나오더라구요;; <수정 코드> http://boj.kr/f72b373b45464778b8313fec9713ba18 수정을 해봤는데 이번에는 틀린 코드랑 나머지는 똑같은데 반복문 안에서 큐에 넣자마자 바로 방문처리를 해주는 것입니다. for (int i = 0; i < 4; i++) { int nr = row + dr[i]; int nc = col + dc[i]; if (nr < 0 || nr >= m || nc < 0 || nc >= n) { continue; } if (puzzle[nc][nr] == 0) { continue; } if (visited[nc][nr]) { continue; } q.push({nr, nc, depth + 1}); visited[nc][nr] = true; } 이렇게 수정하니까 또 맞더라구요.. <수정 코드>가 <틀린 코드>보다 메모리를 덜 차지하는 것은 알겠는데, <맞은 코드>가 <틀린 코드>보다 메모리를 덜 차지하는 잘 모르겠어서 질문드립니다. 질문이 길어서 sorry...

  • c++
  • 코딩-테스트
satanmoo 댓글 1 좋아요 1 조회수 383

어떤 예외가 있는지 잘 모르겠네요

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 예제를 입력했을때는 잘 출력이 되는데 제출을 하면 틀렸다고 뜨네요 어떤 예외가 있을까요? http://boj.kr/c2fcd5fb097e4953a6b6c06f900cb025 감사합니다!

  • c++
  • 코딩-테스트
toyboy0113 댓글 1 좋아요 0 조회수 278

4-C 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/8688fcc2c590479b9ea68877d8ea7530 선생님 저는 코드에 ? 있는 곳에 -1이 왜 있는지 이유를 모르겠습니다. 그리고 저기 있는 -1을 없애고 TC를 돌리면 세그멘테이션 폴트가 나오는데 그건 왜 그런건가요??

  • c++
  • 코딩-테스트
noahsway(김정호) 댓글 1 좋아요 0 조회수 435

1-G 결과가 잘 출력되는데 틀렸다고 결과가 나옵니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/116102baf98342ddbbb0c1926c191911 안녕하세요. 문제 보고 코드를 작성하였고, 실행 시켰을때 결과도 문제에서 요구하는대로 잘 출력되는데 백준에서 채점 결과는 왜 틀렸다고 뜨는지 잘 모르겠습니다. 혹시 코드에서 잘못된 부분이 있는지 한번 봐주실 수 있나요? 감사합니다.

  • c++
  • 코딩-테스트
상현 댓글 1 좋아요 0 조회수 217

출력 부분 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요, 큰돌님! 이번 문제를 풀 때, 저는 출력을 cout.precision(4) cout << ret; 이렇게 cout.precision()을 사용해서 제출을 했더니 틀렸다고 나오고 printf("%0.3lf", ret); printf를 사용했을 때는 정답이라고 나와서 질문드립니다. 입력을 cin으로 받았기 때문에 cout으로 출력을 하고 싶었는데 두개의 차이가 무엇인지 궁금합니다.

  • c++
  • 코딩-테스트
wisesther 댓글 2 좋아요 0 조회수 313

선처리 영역의 구분을 어떻게 해야할까요?

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

c++ 초기화 리스트 수업입니다. 사진의 어셈블리 코드를 보시면, call Inventory::Inventory가 생성자의 몸체부분과 같은 중괄호로 묶여있습니다. 그렇다면 Inventory() 생성자가 선처리 영역이 아닌 몸체 내에서 호출된다고 보는게 맞는걸까요? 물론 선생님이 강의시간에 Inventory() 생성자는 선처리 영역에서 기본적으로 한번 호출된다고 하셨기때문에, 만약에 같은 중괄호에 묶여있더라도 저걸 선처리 영역으로 본다면, 그냥 몸체에 있는 첫번째 코드 int a=3;이 실행되기 전까지의 모든 어셈블리 코드는 다 선처리 영역이다! 라고 보는것이 맞을까요?

  • c++
ch yc 댓글 1 좋아요 0 조회수 534

질문있습니다!

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님 https://www.acmicpc.net/submit/5430/62168272 위 코드가 시간 초과가 납니다. 다른 질문글을 봤을때, 문자열을 split에서 최악의 경우 시간 복잡도가 n^2가 된다고 하였는데 어떤 경우에서 시간 복잡도가 n^2이 되는지 궁금합니다.

  • c++
  • 코딩-테스트
김동훈 댓글 1 좋아요 0 조회수 251

2-p14502 질문입니다

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님 벽을 3개를 세우라고 해서 조합을 먼저 떠올렸고 영역을 구해야 한다는 부분에서 dfs를 떠올렸습니다 그래서 조합과 dfs를 사용해 벽을 3개 세울때마다 dfs 및 visited배열을 매번 초기화 해주고 2차원 배열 arr을 돌면서 2(바이러스)가 나올때마다 동서남북으로 0또는 2인 곳으로 탐색해가며 영역의 크기를 구하게 해주었습니다. 예제는 분명히 다 맞는데 틀리는 이유가 뭘까요? 0또는 2로 한게 잘못된 걸까요? http://boj.kr/5d0f072fce1a471fb02deec85b4d906d

  • c++
  • 코딩-테스트
연준서 댓글 1 좋아요 0 조회수 282

복사 생성자 부분에서 질문이 있습니다.

미해결

홍정모의 따라하며 배우는 C++

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 9.11, 11분 21초 입니다. 교수님께서 복사 생성자를 MyString(const MyString &src) { cout << "Copy constructor" << endl; m_length = src.m_length; m_data = new char[m_length]; if (src.m_data != nullptr){ for (int i = 0; i < m_length; i++) m_data[i] = src.m_data[i]; } else m_data = nullptr; } 이렇게 정의 하셨는데 해당 코드에서는 m_data의 제일 끝에 널 문자를 두지 않습니다. 제가알기로 문자열의 끝부분에는 널문자를 둔다고 기억하는데 왜 이렇게 해도 되는지 궁금합니다!

  • c++
Doyeon Park 댓글 1 좋아요 1 조회수 293

질문있습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

처음에 문제를 풀고 문제가 틀렸다고 나와서 강의까지 다봤습니다. 우선순위 큐를 사용하지 않아도 풀 수 있을거 같다고 생각했고 실제로 예제도 통과 했고 다른 분이 반례가 있다고 올리셨던 것도 통과 했는데 어느 부분이 잘못되었는지 알고싶습니다. http://boj.kr/4f9206a6cf05456a8fa340a8e2fad5c4 코드공유드립니다.

  • c++
  • 코딩-테스트
yadomii 댓글 1 좋아요 0 조회수 309

||(or)연산자를 쓰시는 이유가 있나요?

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

dfs나 bfs문제를 푸실때 if(ny < 0 || ny >= n || nx < 0 || nx >= n) continue; if(a[ny][nx] == 0) continue; if(visited[ny][nx]) continue; 와 같이 or연산을 써서 조건문을 쓰시는데요. and연산자를 쓰지 않고 or연산을 쓰시는 이유가 따로 있으신가요? http://boj.kr/09a17090441545d8ad3b0b7bcac3fb4b 에서 14번 라인과 같이 and연산자로 매번 코드를 짜는데 제가 놓지고 있는게 있나 싶어 여쭈어 봅니다.

  • c++
  • 코딩-테스트
권태완 댓글 2 좋아요 0 조회수 262

6 - G 반례 질문

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님. 6 - G 제가 짠 코드에 대해서 질문 드립니다. 코드를 짜고나서 굉장히 놀랐는데 선생님과 코드가 거의 비슷하더라고요. 헐 내 실력이 여기까지 올랐나? 했는데 제 코드는 틀렸습니다ㅠㅠㅠ 선생님 코드와 다른 점은 lo를 입력된 b+1로 한 것 밖에 없는데 왜 이거는 백준에서 3% 틀렸습니다가 나오는지 잘 이해가 안되서 질문드립니다! #include<bits/stdc++.h> using namespace std; typedef long long ll; ll x, y, ret = -1; int main(){ cin >> x >> y; ll z = (y * 100) / x; ll l = y+1, h = 1e9; ll mid; while(l <= h){ mid = (l+h)/2; if(mid * 100 / (x+mid-y) > z){ ret = mid - y; h = mid - 1; } else l = mid + 1; } cout << ret << "\n"; }

  • c++
  • 코딩-테스트
개발너무어려워요ㅠ 댓글 1 좋아요 0 조회수 242

1-o 시간초과

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/246379b4039146d9bb6c8660ce6e5dfd 입력을 콘솔로바꿨을뿐인데 시간초과가납니다 무슨이유일까요

  • c++
  • 코딩-테스트
ㅎㅅ 댓글 1 좋아요 0 조회수 323

우선순위 큐를 사용하지 않고 그냥 제가 풀었습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

#include<iostream> #include <vector> #include<algorithm> #include<unordered_map> using namespace std; int n; int deadline, lamen; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); unordered_map<int, int> check; cin >> n; vector<pair<int, int>> in(n); for (int i = 0; i < n; i++) { cin >> deadline >> lamen; in[i].first = lamen; in[i].second = deadline; } sort(in.begin(), in.end(),greater<pair<int,int>>()); for (int i = 0; i < n; i++) { int cnum = in[i].second; while (cnum >= 0) { if (check[in[i].second] >= in[i].first) { cnum--; continue; } check[cnum] = in[i].first; } } int result = 0; for (auto& a : check) { result += a.second; } cout<<result; return 0; } 이런식으로 풀어봤는데 어디가 잘못되었는지 잘 모르겠습니다.

  • c++
  • 코딩-테스트
yadomii 댓글 1 좋아요 0 조회수 240

5-H: 13144 답(ret) 관련 문의

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요! 5-H 13144 문제 답을 구하는 코드가 이해되지 않아 문의드립니다. ㅠㅠ 예제 : n= 5, 1 2 3 2 1 를 넣어서 값을 구해보았는데 e=3, s=0, ret=3 / e=4, s=1, ret =6 / e=5,s=2, ret=12 이렇게 나오긴 하던데 ret 코드를 이해하진 못했어요.. 그리고 연속한 1개 이상의 수를 뽑는 경우, 예제: n =5, 1 2 3 2 1 1개 뽑을 때 1,2,3 -> 3가지 2개 뽑을 때 1,2 / 1,3 / 2,3 -> 3가지 3개 뽑을 때 1,2,3 -> 1가지 총 7가지 .. 아닌가용...ㅠㅠ 그럼 시간되실 때 답변 부탁드려요.. long long s, e, cnt[100001], n, a[100001]; long long ret; int main(){ scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%lld", a + i); } while(e < n){ if(!cnt[a[e]]){ cnt[a[e]]++; e++; }else{ ret += (e - s); cnt[a[s]]--; s++; } } ret += (long long)(e - s) * (e - s + 1) / 2; printf("%lld\n", ret); return 0; }

  • c++
  • 코딩-테스트
yhy9201 댓글 1 좋아요 0 조회수 401

안녕하세요! 2 - L NBA 문제 질문이 있습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님 제가 짠 코드에 로직 상 문제가 없다고 생각이들고, 테스트 케이스에 대한 답도 정확히 나오는데 제출 시 틀렸다고 나옵니다. 혹시 제가 놓치고 있는 반례가 있는지 질문드립니다. http://boj.kr/5b06a7f086ee4f499f316de05b95f90a

  • c++
  • 코딩-테스트
김종규 댓글 1 좋아요 0 조회수 391

안녕하세요. 4-B 질문 있습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘듣고 있습니다. 해당문제 관련해서 질문이 있는데요. 일단 비트마스킹을 이용한 풀이법은 숙지했습니다. 근데 비트마스킹을 안쓰고 풀었을때 처음에 틀렸었는데 제가 아래 올린코드에서 Reverse함수의 기저사례 단락에서 "--->이부분!" 이라고 주석표시한 부분 관련해서 궁금한게 있습니다. 문제에서 동전의 뒤집기 갯수가 2보다 작을수는 없다고 해서, 전 처음에 이게 문제가 답에대한 제한조건을 걸었다고 생각해서 저렇게 2보다 큰 경우에만 min값을 갱신하도록 코드를 짰었는데요. 저 부분을 없애야 정답이더라구요. 큰돌님 풀이에서도 2에 대한 제한조건을 거는 부분은 없는것 같은데, 문제에서 해당 예제에관한 설명이 답의 범위에 대해서 제한을 걸어놓은게 아니라 그냥 " 뒷면갯수가 2보다 작은게 불가능하다" 라고 설명해주는 부분인데 제가 잘못이해한건가요?? #include <iostream> #include <vector> #include <string> #include <thread> #include <mutex> #include <limits.h> using namespace std; int n; int coin[21][21]; int minVal=INT_MAX; void Change(int i, int j) //요소 하나 바꾸기 { if (coin[i][j] == 1) coin[i][j]= 0; else coin[i][j]= 1; } void ChangeAll(int length, char hw ,int fix) // 한줄 바꾸기('h' : 행 고정 / 'w' : 열 고정) { if (hw == 'h') for (int i = 0; i < length; ++i) Change(fix, i); if (hw == 'w') for (int i = 0; i < length; ++i) Change(i, fix); } void Reverse(int length, char fix, int fixPos) // 행 다 모든 경우의수로 다 뒤집고 열 하나씩 뒤집어보기 { if (fixPos == length) { int ret = 0; for (int i = 0; i < length; ++i) { int sum = 0; for (int j = 0; j < length; ++j){ sum += coin[j][i]; } if ((length - sum) > sum) ret += sum; else ret += (length - sum); } if(ret>=2) //------------------> 이부분! minVal = min(minVal, ret); return; } if (fix == 'h'){ for (int i = 0; i < 2; ++i){ ChangeAll(length, fix, fixPos); Reverse(length, fix, fixPos + 1); } } if (fix == 'w') { for (int i = 0; i < 2; ++i){ ChangeAll(length, fix, fixPos); Reverse(length, fix, fixPos + 1); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 0; i < n; ++i) { string s; cin >> s; for (int j = 0; j < n; ++j) { if (s[j] == 'H') coin[i][j] = 'H' - 'H' + 1; else coin[i][j] = 'T' - 'T'; } } Reverse(n, 'h', 0); cout << minVal << '\n'; }

  • c++
  • 코딩-테스트
kei jay 댓글 1 좋아요 0 조회수 361

5-칠무해 메모리 초과 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/f0d087e04e7b4e30bdf6e3d226471308 제한이 256MB 인데 왜 메모리 초과가 되는 건지 궁금합니다! 천만 개 다 저장한다고 해도 40MB 아닌가요?

  • c++
  • 코딩-테스트
특별한 거위 댓글 1 좋아요 0 조회수 443

4-2 인접행렬

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요. 4-2 인접행렬 코드 관련 질문 있습니다. 우선 main 에 이중 for문을 두시고 내부에 go 라는 이름의 재귀함수를 쓰셨는데, 이중포문과 재귀함수의 역할이 동일한 것 같습니다. 아래처럼 go 함수에 재귀 부분을 지우니 똑같이 1,2,3,4 가 잘 출력되는데, 혹시 제가 놓친 부분이 있을까요? void go(int f) { visited[f] = 1; cout << f << '\n'; // for (int i = 0; i < n; i++) { // if (visited[i]) continue; // if (v[f][i]) go(i); // } } int main() { for(int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (v[i][j] && visited[i] == 0) go(i); } } }

  • c++
  • 코딩-테스트
정성윤 댓글 1 좋아요 0 조회수 394

인기 태그

인프런 TOP Writers

주간 인기글