묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-F 해설이해
안녕하세요 선생님 강의를 보고 살짝 헷갈리는 부분이 있어 질문드립니다.Q1. 사진은 선생님이 설명해주실때 그려주신건데, 왼쪽 num[1] oper[1] num[2] 이 부분이 괄호를 쳐서 연산해주었다고 생각해도 되는건가요?즉 제가 이문제를 접근할때 완전탐색으로 재귀호출시에 1. 괄호를 묶거나 2. 괄호를 묶지 않거나 이렇게 두가지로 생각을 해서 호출을 하려 했습니다.사진의 오른쪽은 그냥 현재 인덱스와 그 다음 인덱스를 연산하는것이기 때문에 왼쪽부터 오른쪽으로 연산하는것 이기에 괄호연산을 하지 않았다고 판단했고, 왼쪽은 오른쪽에서 부터 왼쪽으로 연산을 했기 때문에 괄호 연산을 한것이라고 판단하였습니다.근데 이번 인덱스를 먼저 계산하는 것이기 때문에 그 반대가 맞는것 같기도 하네요..Q2. 그리고 또 질문은 만약 괄호를 추가하냐 추가하지 않느냐 이렇게 두가지로 가정한다면 재귀호출후 원복하는 부분이 필요할것 같은데 그 부분이 왜 따로 없는지도 궁금합니다.-> 이 부분 제가 생각해 보았는데, visited 등과 같은 전역변수 배열은 한번 체크하면 재귀 탈출후에도 체크가 남아있어서 따로 지우는 로직이 필요한 것이고, 이번 문제의 경우는 재귀함수에서 하나의 함수를 탈출하면 재귀의 특성때문에 자동적으로 선택하기 이전으로 돌아가기 때문에 따로 뭔가를 지우는 로직이 필요없는것인가요? 혹시 제가 생각한것이 맞는 생각인건가요? 아니면 아예 접근을 그런식으로 하면 안되는건가요?
-
미해결홍정모의 따라하며 배우는 C++
4.2 전역 변수의 값을 바꿨을 경우
int a = 1;void doSomething() {++a;cout << a << endl;}int main() {int a = 10;doSomething();doSomething();doSomething();doSomething();}선생님께서 19분 38초 쯤에 이 코드에 관해서,<이런 식으로 int a = 10을 추가해 무의식적으로 a가 doSomething() 안에서 10이 출력되길 바랄 수 있는데 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다.그럼 바뀐 값이 doSomething()에서 출력되는 것>이라고 설명하셨습니다.그런데,선생님께서 설명하신대로라면, 바뀐 값이니 10, 11, 12, 13이 나와야 하는데,저 코드를 출력하면 2, 3, 4, 5가 출력됩니다...혹시 선생님께서 잘못 설명하신 걸까요?ㅠ그래서 전역 변수는 어디서나 값을 막 바꿔버릴 수 있다는 설명도 헷갈립니다ㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[알고리즘교안]pop_back, auto 관련 질문
안녕하세요. 알고리즘 교안에서 string 부분 중 코드 컴파일이 안되서 질문드립니다.코드는 다음과 같습니다.#include <bits/stdc++.h> using namespace std; int main(){ string a = "love is"; a += " pain!"; a.pop_back(); cout << a << " : " << a.size() << "\n"; cout << char(* a.begin()) << '\n'; cout << char(* (a.end() - 1)) << '\n'; // string& insert (size_t pos, const string& str); a.insert(0, "test "); cout << a << " : " << a.size() << "\n"; // string& erase (size_t pos = 0, size_t len = npos); a.erase(0, 5); cout << a << " : " << a.size() << "\n"; // size_t find (const string& str, size_t pos = 0); auto it = a.find("love"); if (it != string::npos){ cout << "포함되어 있다." << '\n'; } cout << it << '\n'; cout << string::npos << '\n'; // string substr (size_t pos = 0, size_t len = npos) const; cout << a.substr(5, 2) << '\n'; return 0; }위 코드 실행시 std::string has no member named 'pop_back' 와 'it' does not name a type 오류 메세지를 받습니다.검색해보니까 C++11이상 버전이 아니라서 그렇다는데 교안 첫 부분에 알려주신대로 C++14버전으로 컴파일 할 수 있게 설정을 한 상태입니다. 어떤게 문제인지 알려주시면 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
문제 리스트(파트에서 어떤 문제 푸는지) 한번에 나와있는건없나요?
문제 리스트(파트에서 어떤 문제 푸는지) 한번에 나와있는건없나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K 시간초과 문의드립니다.
https://www.acmicpc.net/source/61767351 처음에 선생님이 알려주신 알고리즘은 전혀 생각 못해서초기에 했던 방법인데요,순열을 이용하면서시간초과 안 나오게 하는 방법이 있을까요?^^
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-k
http://boj.kr/03290916701f4404a5a123bd6b4553aa선생님 제가 짜본 코드인데 왜 시간초과가 나는지 모르겠습니다. 감사합니다!!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
게임 프로그래머 입문 올인원 vs c++ 언리얼
C++ 언리얼 part 1, 2수강하고 진행을 못하다가 지금 다시 하려고 보니 게임 프로그래머 입문 올인원 이 나왓던데 차이가 있는건가요? 아니면 1,2 햇으니 연재가 중단됫던데 part3,4를 마져 보는게 나을까요?아니면 UE5로 넘어가는게 나은가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-F 질문
http://boj.kr/3b4b7ecd25584d88aa330a92277594f5스캔으로 받았는데 출력형식이 자꾸 다르다고하네요 무엇이 문제일까요??겟라인으로 받으면 세그먼트폴트가뜹니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1012 - 반례를 모르겠습니다. JAVA
안녕하세요. 큰돌님 강의 잘 보고있습니다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { static int[][] board; static boolean[][] visited; static int[] dy = {-1, 0, 1, 0}; static int[] dx = {0, 1, 0, -1}; static int yLen; static int xLen; static int cnt; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); while (n-- > 0) { int[] given = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); if (given[2] == 1) { sb.append(1).append(System.lineSeparator()); continue; } board = new int[given[0]][given[1]]; visited = new boolean[given[0]][given[1]]; yLen = given[0]; xLen = given[1]; for (int i = 0; i < given[2]; i++) { String[] numStr = br.readLine().split(" "); int y = Integer.parseInt(numStr[0]); int x = Integer.parseInt(numStr[1]); board[y][x] = 1; } for (int i = 0; i < yLen; i++) { for (int j = 0; j < xLen; j++) { if (!visited[i][j] && board[i][j] == 1) { dfs(i, j); cnt++; } } } sb.append(cnt).append(System.lineSeparator()); } System.out.print(sb.substring(0, sb.length() - 1)); } public static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny < 0 || ny >= yLen || nx < 0 || nx >= xLen) continue; if (visited[ny][nx] || board[ny][nx] == 0) continue; dfs(ny, nx); } } }위 코드를 실행하면 12%, ArrayIndexOutOfBounds가 발생하는데 어떤 부분인지 알 수 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-a 재귀 조합 순열없이 풀어봤는데요
http://boj.kr/e2cc8079959e434fb04a9022bc8143ab솔직히 시간도 오래걸렸고 많이 비효율적인거같습니다고로 1주차부터의 공부방향이 궁금합니다먼저직접 풀어보고 선생님께서 알려주신 방법들로도 전부 풀어보고 되도록 많은풀이법을 사용해보고 최적의 풀이를 빠르게 도출해내는 방향으로 공부하면 될까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-D 시간복잡도 질문입니다.
안녕하세요 선생님.lower_bound나 upper_bound의 경우 vector의 크기가 n이면 시간복잡도가 n일 것 같은데이 문제의 경우에for(int i = 0; i < n; i++){ auto pos = lower_bound(v.begin()~~~)~~~`}이면 시간 복잡도가 n^2로 이분탐색하는 것보다 더 클 것 같은데 맞나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-0 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/07ed32a221874496820c25211823021a선생님 안녕하세요 강의 덕분에 많은 도움을 받고 있습니다.제가 쓴 코드에서 1번으로 하면 정답이 안나오는데 이유를 잘 모르겠어서 질문을 드립니다. 비록 부족한 지식에 정보 공유 부탁 드리겠습니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
입력값만 scanf로 받았는데 백준에서는 틀렸다고 나오는데 한번봐주세요..
입력 받을때만 scanf로 문자열을 받았는데 백준에서는 틀리다고 나옵니다.한번봐주실 수 있나요?입력과 출력은 맞는걸 확인했습니다. http://boj.kr/0e2343838c434d4ea9bf1074afce3aac
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
#3-D 반례 질문
http://boj.kr/be44657dbfb64b30ace731e5969c07713-D 번 문제 질문드립니다계속해서 84%에서 틀렸다고 해서 많은 반례들을 넣어봤는데도 해결이 되지 않아 질문드립니다. 제가 풀이한 방식은 우선 선생님처럼 사람 visited 배열, 불 visited 배열 두가지를 만들어 따로 처리해주었고, 하나의 queue를 이용하여 먼저 불을 넣고 그 다음 사람을 넣어서 while 루프를 돌려서 최단거리를 찾았습니다.만약 사람이 이동하는 곳에 불이 이미 있으면 이동하지 않고, 불이 없고 벽도 없을경우 이동하고 만약 이동한 곳이 가장자리이면 탈출하여 최단거리를 출력하는 방식입니다. 또한 bfs이므로 가장 처음 나오는 답이 최단거리라 판단하여 곧바로 break를 걸고 출력하였습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-h
선생님 수업 잘듣고있습니다. 다름이 아니라 선생님께서 푸신 방법 말고 if(!visited[next]){ q.push(next); visited[next]=visited[now]+1; cnt[next]+=cnt[now]; v[next].push_back(now); }이런식으로 인접 리스트를 만들어서 구현을 해보고싶은데 계속해서 에러가 발생됩니다. 도와주실 수 있으신가요? 감사합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 질문있습니다
안녕하세요, 큰돌님강의와 비슷한 로직인것 같은데, 메모리초과 되어 질문합니다!메모리초과가 나는 이유를 모르겠습니다ㅣ. K가 10일때, 2^1024만큼 go함수를 호출해서 틀린건가 싶기도 합니다...
-
미해결홍정모의 따라하며 배우는 C++
char *name vs const char *name
안녕하세요,전자는 에러나고 후자는 ok인데, 그 이유가 "string literal은 constant array of chars이므로, pointer 또한 const이어야 한다"라고 다른 곳에서 설명을 봤습니다.(https://stackoverflow.com/questions/61601872/why-do-string-literals-char-in-c-have-to-be-constants)이 설명과 "기호적 상수"개념이 어떻게 연결될 수 있는지 궁금합니다. (사실 지금 예시에서 "기호적 상수"가 어떤 의미인지 제대로 모르겠습니다.)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[2-D] 답안 관련 질문
안녕하세요. 강사님2-D 답안을 보면서 질문이 있습니다.해설 강의에서 설명한 DFS 반환값 설정과 DFS 로직은 이미 이해한 상태에서 해당 문제를 접했는데요.제가 답안을 보고 수정 및 작성한 코드는 아래입니다./* 답 : http://boj.kr/9815cd371fe643f59ac17a410e0cfca4 */ #include <bits/stdc++.h> using namespace std; int M, N, K; int m[104][104]; bool visited[104][104]; vector<tuple<int, int, int, int>> c; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; int dfs(pair<int, int> node) { int count = 1; visited[node.first][node.second] = true; for(int i = 0; i < 4; i++) { int nx = node.first + dx[i]; int ny = node.second + dy[i]; if(nx < 0 || nx >= N || ny < 0 || ny >= M) continue; if(!m[nx][ny] && !visited[nx][ny]) count += dfs({nx, ny}); } return count; } int main(void) { cin >> M >> N >> K; for(int i = 0; i < K; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; c.push_back({x1, y1, x2, y2}); } fill(&m[0][0], &m[0][0] + 104 * 104, 0); for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) for(int k = 0; k < K; k++) if(get<0>(c[k]) <= i && i < get<2>(c[k]) && get<1>(c[k]) <= j && j < get<3>(c[k])) m[i][j] = 1; // for(int i = 0; i < N; i++) // { // for(int j = 0; j < M; j++) // cout << m[i][j]; // cout << '\n'; // } int component = 0; vector<int> area; for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) if(!m[i][j] && !visited[i][j]) { component++; area.push_back(dfs({i, j})); } sort(area.begin(), area.end()); cout << component << '\n'; for (int i = 0; i < area.size(); i++) cout << area[i] << ' '; cout << '\n'; return 0; }저는 강사님과 약간 다르게 코드를 작성했는데 강사님의 이해를 돕기 위해 다른 점을 살짝 설명드리면해당 문제 예시 그림에서 시계 방향으로 90도 회전한 상태라고 가정하고 진행을 했습니다. 그래서 x, y 위치가 반대고 각 이중 for 문의 첫 for 문 내 조건문 표현식에서 N 을 사용합니다.미리 영역 좌표를 받고 int 형 데이터 4개를 가지고 있는 튜플을 사용했는데요. 제가 안되는 부분은 바로 해당 튜플을 가지고 영역을 표시할 때 입니다. for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) for(int k = 0; k < K; k++) if(get<0>(c[k]) <= i && i < get<2>(c[k]) && get<1>(c[k]) <= j && j < get<3>(c[k])) m[i][j] = 1;중요한건 오른쪽 위 좌표에 대해서 검사를 할 때 등호를 포함시키지 않는게 답을 위한 중요한 부분이였는데요. 이 부분이 이해가 가질 않습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-C질문입니다
cnt[100]이 아닌 cnt[104]를 사용하는 이유가 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dev c++ 오류
https://www.inflearn.com/questions/773687/dev-c-%EC%9E%90%EC%B2%B4-%EC%98%A4%EB%A5%98 안녕하세요 선생님위 링크와 같은 문제를 겪고 있는데요.저도 마찬가지로 경로에 공백이 있는데요. 경로를 구체적으로 어떻게 설정하는지모르겠습니다. Chat GPT와 구글링도 해봤지만 도저히 방법을 모르겠어서 질문드립니다.단계별로 해결방법을 알려주시면 감사하겠습니다~