묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결IT 기업 취업을 위한: 코딩테스트 혼자서 정복하기 (C/C++)
배낭문제가 백준문제로 있어서 작성했는데 왜 안되는지 알 수 있을까요?
https://www.acmicpc.net/problem/12865 #include <iostream>#include <algorithm>using namespace std;int N, K;int W[101];int V[101];int DP[101][100001];int main(){ scanf("%d%d", &N, &K); for (int i = 1; i <= N; i++){ scanf("%d %d", &W[i], &V[i]); } for (int i = 1; i <= N; i++) { for (int j = 1; j <= K; j++) { if (j < W[i]) { DP[i][j] = DP[i-1][j]; } else DP[i][j] = max(DP[i-1][j],DP[i-1][j-W[i]]-V[i]); } } printf("%d", DP[N][K]);} 안녕하세요? 정올 문제로 배낭문제 수강하고 똑같이 있는 백준문제를 발견하고 작성한 코드인데 채점을 하면 틀렸다고 뜹니다. 혹시 이유를 알 수 있을까요?
-
해결됨홍정모의 따라하며 배우는 C언어
문자열에 대해 질문있습니다.
안녕하세요. 궁금한 게 있어 질문드립니다.int main() { char str1[] = "String11"; char *str2 = "String22"; printf("%s %s\n", str1, str2); // String11 String22 printf("%p %p\n", str1, str2); // 0x16fc27078 0x1001dbf69 printf("%s\n", str2); // String22 printf("%c %p\n", *str2, str2); // S 0x1001dbf69 int arr1[] = {1, 2, 3}; int arr2[] = {4, 5, 6}; int *arrptr = arr2; // printf("%d %p\n", arr1, arr1); // 1876390008 0x16fd77078 printf("%d %p\n", *arr1, arr1); // 1 0x16f307078 printf("%d %p\n", *arrptr, arrptr); // 4 0x16f4eb068 int n = sizeof(arr1) / sizeof(int); for (int i = 0; i < n; i++) { printf("%d ", arr1[i]); } return 0; }int형 배열은 반복문을 통해 원소를 하나씩 꺼내어 출력해줘야 하는데, char str1[] = "String11" 에서 문자열 배열은 String11이라는 문자 하나하나가 모여서 문자열을 이루고 있음에도 불구하고 str1을 %s포맷으로 printf함수로 출력하면 왜 반복문을 사용하지 않아도 문자열이 그대로 나오나요?그리고 char *str2 = "String22" 에서도 char형 포인트 변수 str2에는 문자열 "String22"중에서 첫번째 문자인 'S'의 메모리 주소가 저장되어 있을 텐데 str2도 마찬가지로 'S'만 나오는 것도 아니고 왜 문자열 전체가 그대로 나오는건가요..?
-
해결됨홍정모의 따라하며 배우는 C언어
7-2. getchar(), putchar() 함수
안녕하세요. 강의를 들으며 궁금한 점이 생겨 질문드립니다. 1번 예제를 보고, 저는 getchar() 함수가 '입력 받은 문자를 해당 아스키코드에 대응하는 정수로 해석해 변수에 그 값을 저장'한다고 이해했습니다. 그렇다면 그 값을 int로 해석한 뒤 char type 변수에 다시 저장하는 것인데, 이 지점이 잘 이해되지 않습니다. char 범위의 값을 int 형식으로 해석한 뒤 다시 변수에 저장하기 때문에 메모리에 있어 아무 문제가 없는 걸까요?? int로 해석하는 것이 'int 형식으로 값을 변환함'으로 이해하는 것이 맞을까요??buffer라는 임시 공간이 활성화 되는 시점은 getchar() 함수를 통해 문자열을 입력한 뒤, 반복문에 들어가는 때인가요? 아니면 getchar() 함수로 입력받는 그 순간 buffer가 활성화 되는 건가요?늘 친절한 답변 감사합니다!
-
해결됨Windows 시스템 프로그래밍 - 기본
프로세스 힙 확인에 대한 질문이 있습니다.
안녕하세요 선생님프로세스 힙 상태 확인 예제 코드 결과에서 나온 region은 allocation size 인 64KB 인것 같은데왜 block은 32KB인가요? 전 강의에서는 Allocation size (64KB), page size (4KB) 이렇게 나온것 같은데 그냥 새로운 논리적 구분 범위가 또 있다고 생각하면 되나요?
-
미해결홍정모의 따라하며 배우는 C언어
배열 초기화 쉼표 쓰임
안녕하세요. 잘 듣고 있습니다. char cakes[7] = { 'A' ,}; 이런식으로 배열 초기화시 마지막에 쉼표를 넣는 경우가 있는데 무슨 뜻인가요? 해당 내용이 궁금해서 '배열과 포인터' 같은 연관 강의를 빠르게 찾아봤는데, 없었습니다. 혹시 해당 내용 설명한 강의가 있나요?
-
미해결홍정모의 따라하며 배우는 C언어
float의 가장 작은 값
강의에서 1:00에서 변수 max에다가 float가 가질 수 있는 가장 작은 값을 입력하는데 FLT_MAX에다가 -를 붙이는데 FLT_MIN을 사용하지 않는 이유가 뭔가요?또 정수형의 경우예를들어 char형이면 char형의 최댓값은 127이고 최솟값은 -128이어서 최댓값인 127에 -를 붙여도 최솟값이 안되는데실수의 경우는 다른가요? 그냥 최대값인 FLT_MAX에 -를 붙이면 최솟값이 되나요? 항상 감사합니다!!!
-
미해결홍정모의 따라하며 배우는 C언어
강의 예제 flag의 사용이유
강의 초반부분 0:20 부분을 보고 코드를 짜보았습니다.#include <stdio.h> int main() { char ch; int characters = 0, words = 1, lines = 1; printf("Enter text : "); while ((ch = getchar()) != '.') { if (ch == ' ') words++; else if (ch == '\n') lines++; else characters++; } printf("Character = %d, Words = %d, Lines = %d", characters, words, lines); return 0; }이 후 강의를 끝까지 다 봤는데 교수님의 코드와 저의 코드는 상당히 달랐습니다. 교수님은 flag라는 _Bool자료형을 사용했습니다.코드를 한줄 한줄 읽어가면서 flag가 어떤식으로 작동하는지는 쪼오끔 알았는데 flag를 사용하는 이유를 모르겠습니다.강의를 보면 프로그래머들이 자주 사용하는 형식이라고 하는데 flag의 장점이 뭔가요? 항상 감사합니다!!!
-
해결됨CUDA 프로그래밍 (3) - C/C++/GPU 병렬 컴퓨팅 - 메모리 구조
video에 필터를 적용하는 경우
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 너무 좋은 강의 다시 한번 감사드립니다. 다름이 아니고, video에서 각각의 frame별로 filter를 처리하는 부분을 cuda도 구현하는 코드를 짠다고 가정할 때, 각 프레임은 W x H x C ( rbg) 의 차원을 가지고 있고 영상이기 때문에 영상은 W x H x C x T 의 차원을 가지고 있을 겁니다. 그렇다면, cudaMalloc3D나 cudaMemecpy3D 부분을 사용해서 각 frame을 처리하고 ( device ) 나머지는 for 문 ( host ) 으로 시간에 따라 frame을 device로 보내도록 구현하였습니다. 그런데 혹시 시간 부분 까지 device에서 처리할 수 있는 방법이 있는 지가 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
/0 앞에 띄워쓰기 유무로 자릿수가 변하나요?
char str3[20] = "Hello,\0World";char str3[20] = "Hello, \0World";printf("%c\n", str3[10]); 의 값이, 바로뒤에\0를 치면 l이고, 하고 한 칸 띄고 \0을 치면 r입니다. h = 0번째e = 1번째..., = 5번째\0 = 6번째W = 7번째o = 8번째r = 9번째l = 10번째d = 11번째 중간에 띄워쓰기도 공백으로서 자릿수를 차지해서위와 같은 결과가 나오는 걸까요?
-
해결됨CUDA 프로그래밍 (2) - C/C++/GPU 병렬 컴퓨팅 - 벡터 vector 더하기
global 변수가 cuda memory에서 사용되는 이유
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 선생님! 궁금한 게 있어서요. device memory와 host memory는 구분되어 있잖아요?? 그래서 각각 사용되는 데이터는 각각의 메모리에서 사용하는 것으로 알고 있었어요. 그런데 vecSize 나 saxpy_a는 global로 선언 되어 있는데, 이 변수들은 device메모리에서 어떻게 사용하는 거죠?? global 변수의 위치는 host memory에 위치 하지 않나요??
-
미해결홍정모의 따라하며 배우는 C언어
강의 내용 중 연산자의 우선순위
강의 17:00부분을 보면 어떠한 expression이 있을 때 괄호의 경우 어느것 먼저 계산될지는 c언어 표준에 정해져있지않으므로 컴파일에 따라 결정된다고 설명해주셨습니다.그런데 구글에 c언어 연산자 우선순위를 검색하면 associativity라고 있는데 연산자 우선순위가 같은 경우 이 방향에 따라서 결정되는거 아닌가요?괄호 같은 경우 연산자 우선순위가 1순위지만 associativity가 왼쪽에서 오른쪽이므로 여러개 있을경우 왼쪽부터 계산되는거 아닌가요?제가 잘못이해한걸까요?감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
강의 예제
#include <stdio.h> int main() { int number; printf("Input a positive integer : "); scanf("%d", &number); if (number % 2 == 0) printf("Even"); return 0; }강의 예제에서 숫자를 받아서 그 숫자가 짝수면 Even을 출력하는 예제를 만들었습니다.숫자를 문자 'A'로 받으면 'A'는 65니까 당연히 아무것도 출력이 안될줄알았는데 왜 Even이 출력되는걸까요?
-
미해결홍정모의 따라하며 배우는 C언어
다중 구조체 문의
안녕하세요 수강생 입니다.문의 사항이 있어 글 남깁니다.다중 구조체에 대해 문의남깁니다.예를들어struct test{int a=0;int b=0;}TEST[2][2] *PTEST[2][2]; 이런 식 입니다.이때, 구조체에 접근할 때 주소연산자가 아닌 대입으로 접근이 가능한데 왜 그런가요?예를 들어..PTEST[2][2]->a 는 접근이 안되고 TEST[2][2].a는 접근이 됩니다.
-
미해결홍정모의 따라하며 배우는 C언어
12.2 강의 질문있어요
안녕하세요.const char* str = “Constant string”; // str is a modifiable lvalue.str = “Second string”; // “Constant string” = “Second String” // imposiblestr[0] = ‘A’; //Error char str2[] = “String in an array”;str2[0] = ‘A’; // OK 문자열 포인터 개념이 좀 어렵게 느껴지네요.str[0] = ‘A’; 은 왜 안되는 건가요? 만약 포인터를 이용해서 0번째 배열에 원소를 저장하고 싶으면 어떻게 해야 하나요?
-
해결됨CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
gpu-add.cu 부분에서 커널 lanch 이후 cudaDeviceSynchronize() 부분 질문이요
- 출장이 잦아서, 답변에 시간이 좀 걸릴 수도 있습니다. 양해 바랍니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요. 선생님 좋은 강의 잘 듣고 있습니다. 강의 부분에 질문이 하나 있어 이렇게 남깁니다.kernel 을 launch한 이후에 cudaDeviceSynchronize() 를 call 해주는 이유가 kernel의 작업 완료를 보장하기 위함이라는 사실은 인지하고 있습니다.그런데, 그 아래 부분에서 cudaMemcpy를 해주기 때문에 저 부분이 생략해도 되지 않나 싶어서 질문을 남깁니다. memcpy가 저번 강의 때, kernel 작업 완료 후에 이뤄진다고 말씀하셨던 부분이 있어서, cudaDeviceSynchronize() 을 이번 예제에서 빼도 상관 없지 않을까해서 질문드립니다. 좋은 강의 감사합니다.
-
미해결혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것
7.1 함수의 작성과 사용
설명해주신 내용중에 main 함수와 sum 함수에 모두 res라는 정수형 변수가 사용되는데 main 함수와 sum 함수에 있는 res를 다른걸로 봐야할까요 아니면 같은것으로 봐도 되나요? 다른 것으로 봐야한다면 두개의 변수를 다르게 표현해야하지 않나요?
-
해결됨홍정모의 따라하며 배우는 C언어
6-11 질문
안녕하세요! 다음 코드를 제 스스로 분석해봤는데, 정확한 분석이 맞는지 헷갈려서 질문드립니다.(1)Comma 연산자는 Assignment 연산자보다 서열이 낮은 것으로 알고 있습니다.1번 예시에서 콤마가 작동하는 시기는 z에 x의 값이 대입되고, y에 값 2가 대입된 뒤인가요?콤마 연산자는 왼쪽에서 오른쪽으로 계산을 하는데, 이미 대입연산자에 의해 각각 값이 대입된 변수 z와 y를 또 계산한다는 것이 잘 이해되지 않습니다.이 경우의 콤마 연산자의 계산이란 무엇인지 알려주시면 감사하겠습니다. (2)1번 예시와 2번 예시의 차이점은 무엇이 먼저 계산되느냐 일까요?즉 1번 예시에서는 x에 1이 대입되고, 그 값이 다시 x에 대입된 뒤, y에 2가 대입되고, 콤마 연산자가 작동한다면, 2번 예시에서는 x에 1이 대입되고, y에 2가 대입된 뒤, x의 값이 z에 대입되고, 콤마 연산자가 작동하는 건가요? 늘 친절한 답변 감사합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
6-10. 어셈블리 질문!
안녕하세요. 강의에서 일반문과 그것의 축약문의 어셈블리 비교를 통해 효율성을 체크했습니다.그냥 보면 둘은 똑같아 보였는데, 자세히 보니 끝에서 두 자리가 다르더군요.이건 제 단계에서 크게 신경쓰지 않아도 되는 것 같은데, 그래도 궁금해서 질문드립니다.일반문과 축약문의 어셈블리가 완전 같지는 않은데, 저 정도는 효율성을 따지는데 있어 굳이 신경 쓰지 않아도 되는 건가요?
-
해결됨Windows 시스템 프로그래밍 - 기본
친화력 조절 (꼼수)에 관한 질문입니다.
안녕하세요 선생님 꼼수관련 질문이 2개 있습니다.1) 문제가 생긴 프로그램이 multi threading 때문에 context switching이 자주 일어나서 2시간만 지나면 고장나는 것인가요?2) 이를 하나의 프로세스로 고정시키면 여전히 context switching 이 일어나더라도 cpu core가 완전히 바뀌는게 아니라 좀 더 손쉬운 context switch가 일어나서 부하가 덜간다... 이런 느낌으로 이해하면 맞을까요?
-
해결됨Windows 시스템 프로그래밍 - 기본
GetString 에서 free하지 않고 가져오기만 했을 때는 동기화가 필요없나요?
강의에서 GetString 도 free(...) 를 호출하고 = NULL; 을 호출하기에 WRITE 요소가 있어 동기화가 필요하다 얘기해주셨는데 그렇다면 정말 sprintf_s 로 버퍼를 복사해오는 읽기만 있다면 GetString 함수를 동기화할 필요가 없나요? 두 Worker Thread에서 free(...) 를 호출한 이후에 Main Thread 에서 그 값을 버퍼로 복사해오는 읽기 작업을 한다면 제대로된 문자열을 복사해오지 않을 수 있을 것 문제가 발생할 수 있어보여서여A Thread는 WRITE / B Thread는 READ 만 했을 때 READ함수에는 동기화를 하지 않아도 되는지 궁금합니다.