묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C++
casting 원리 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. casting 에 대해서 궁금한게 생겼습니다. 모든 date 는 메모리에 1과0으로 저장이 되는데 date type 의 차이는 저장된 메모리를 어떤 방식으로 출력하냐의 차이인가요? 예를들면 65라는 수는 char type, int type 모두 0000 0000 0100 0001 로 저장이 되지만 이를 출력할때 char type 으로 선언하면 아스키테이블을 거쳐서 A로 출력되는거고 int type 으로 선언하면 이진수계산을 통해 65로 출력되는 그런 형식인지 생각이 되서 casting 이라는게 강제로 메모리출력방식을 바꿔주는건가 궁금합니다. *1 00001011 000 1010 1011 0100 0000 0000 이렇게 저장된 long type 의 변수가 이진수로 저장이되던게 double type 으로 casting 하면 부호,지수,가수부분을 계산한 부동소수점수로 표현이되는지..?
-
미해결홍정모의 따라하며 배우는 C++
float 형 데이터가 메모리에 저장될때
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 첫번째 질문 float 형 데이터가 메모리에 저장될때 이진수를 정규화(?)시켜서 저장이 된다고 하는데(구글링했습니다) 쉽게 말하면 부동소수점수와 근사하는 이진수데이터를 메모리에 저장한다는 뜻인가요? set precision(17)로 float d=0.1 를 출력하면 강의에서와 같이 마지막소수점이 1로 나왔다는건 메모리에 저장되어있는수가 실제 0.1이 아닌 소수점 18번째 자리부터 반올림했을때 올라가는 0.1에 근사한수 인지입니다. 두번째 질문 구글링해보니 setprecision 은 정수부,소수부를 포함하여 고정된 n 의 너비를 가지게끔 입출력을 조작하는 함수라고 나와있습니다. 그런데 0.1 과 3.14159 를 비교하여 출력해보니 너비가 다르게 나옵니다. 정수부나 소수부가 0인경우 너비를 고려하지 않는건가요? 세번째 질문 double d = 0.1 을 선언하고나면 메모리에 0.1 에 근사하게끔 0과1로 메모리가 저장된다고 한다면 setprecision 을 적지않고 d 를 출력했을때 왜 0.1 이 출력되는건가요? 메모리에 저장되어있는 수를 꺼내는 원리가 아니라 내가 초기화시킨 값의 형식(적은 수의 모양 자체) 를 출력해주는 건가요?
-
미해결홍정모의 따라하며 배우는 C++
numeric_limit 함수 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를ㅇ 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. cout 으로 int 의 표현되는 최대정수를 구하기위해 numeric_limits<>::max() 를 출력할때 ()를 넣으면 정수가 출력되고 ()를 넣지않으면 다른게 출력됩니다. min, lowest 도 마찬가지인데 어떤 차이가 있는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-H 13144
예시 답안으로 주신 코드와 해설강의가 전혀 이해가 안 되서 질문 드립니다. 예시 답안의 Line 19와 Line 24에 대해서 입력이 5 / 1 2 3 1 2 로 주어졌을 때 어떤 경우의 수가 19,24 번째 줄에서 카운팅이 되는지 실제 예시를 들어 답변해주시면 감사하겠습니다. (ex. s=0, e=3일 때 a,b,c의 경우가 카운팅 된다. )
-
미해결홍정모의 따라하며 배우는 C++
안녕하세요 교수님 이번 강의에 대한 문의를 드리려고 합니다.
안녕하세요~ 일단 질문하기에 앞서 교수님의 강의 정말 감사하며 잘 보고 있습니다. 제가 이번 강의를 들으면서 강의 내용에 의문점이 생겼습니다. 그래서 제가 생각한 방식을 말씀드리고 의견을 한번 여쭤보고 싶었습니다. 일단 5분 21초경에 복사생성자가 1번만 호출이 됩니다. 저는 여기서 dosomething이란 함수에서 class타입인 temp를 return해줄때는 왜 복사가 일어나지 않는지 궁금했습니다. 제가 생각한대로라면 복사생성자가 두번 호출되어야 하니까요. 그래서 디버거모드로 한번 돌려보았습니다. 그 결과 return을 해줄때 복사생성자가 호출된다는 것을 알게되었습니다. 그럼 왜 return값을 대입해줄때는 복사생성자가 호출되지 않았을까요? 생각해보았더니 return값이 rvalue라서 그런거 같다는 생각이 들었습니다. 그래서 만약 return값이 lvalue이면 해답을 알 수 있을 것 같아서 dosomething함수의 return 타입을 클래스 참조로 바꾸고 같은 조건으로 디버거 모드를 실행해보았습니다. 그 결과 함수 안에서 return할때는 복사가 일어나지 않았고(참조이기 때문에 당연하다 생각했습니다.) , result객체를 생성할 때(lvalue를 대입할 때) 복사 일어났습니다. 그래서 제 결론은 lvalue를 대입 할 때는 복사 생성자가 호출되지만 rvlaue를 대입 할 때는 함수의 return에서 이미 복사가 일어나고 변수에 그냥 대입 된다고 보았습니다. 여러번 생각해보았으나 이 과정 중에 제가 잘못 생각한 부분이 있는지 여쭤보고 싶습니다. 아직 부족한 점이 많아서 제 생각의 흐름에서 어디가 빵꾸났는지 알고 싶습니다. 긴 글 읽어주셔서 감사합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
생성자 질문(타입 변환 생성자)
opertor를 공부하면서 생성자 부분이 궁금해서 테스트를 해보았는데 class Player{public : int m_iHp; int m_iAttack; int m_iDefense; public: Player() : m_iHp(100), m_iAttack(20), m_iDefense(5) { cout << "Player 기본 생성자!" << endl; } Player(int id) : m_iHp(200), m_iAttack(40), m_iDefense(10) { cout << "Player ID 받는 버젼 생성자!" << endl; } ~Player() { cout << "Player 소멸자!" << endl; }}; class Knight : public Player{public: int m_iStat; public: Knight() : m_iStat(10) { cout << "Knight 기본 생성자!" << endl; } Knight(int id) : Player(id), m_iStat(20) { cout << "Knight id 받는 버젼 생성자!" << endl; } ~Knight() { cout << "Knight 소멸자!" << endl; } }; int main(){ Knight k1; k1 = 3; return 0;} 현재 Knight k1을 만들게 되면은 콘솔창에 출력문이 이렇게 찍혀 햇갈리는 부분이 있어서 질문드립니다. 메모리를 확인해보니 k1의 주소(0x000000718D0FF688)는 이런값으로 안에 데이터들이 스택에 자리를 차지하게되어있었습니다. 이후 k1 = 3; 를 하게되면 Knight k1의 스택에 있는 주소가 가르키는 값들이 변경이 되는데 이는, 타입 변환 생성자(기타 생성자)를 통해 만들어진 객체를 만들어서 "암시적 형변환"으로 만들어진 객체를 대입연산자로 k1의 주소에 멤버 변수 하나하나를 다 덮어 쓴 형태인거같더라구요 즉, 정리하자면 1) Knight k1; 을 하는 순간은 스택에 기본 생성자를 호출 한 상태로 올라간다. 2) k1 = 3 하였을 경우, 컴파일러가 암시적 형변환으로 인자를 하나를 받는 Knight의 타입 변환 생성자(기타 생성자)를 호출한뒤 k1의 주소에 '=' 연산자를 통해 멤버 변수 하나하나를 덮어쓴다. (얕은 복사) 여기서 궁금한점이 소멸자를 출력하는 문장이 두줄에 걸쳐서 나오는게 아니라 이런식으로 4줄에 걸쳐서 나오는데 이게 분명히 암시적 형변환으로 생성한 객체를 생성하고 기본생성자로 만든 k1에 멤버 변수들을 덮어썻다고 생각해서 스택에는 Knight의 객체가 하나밖에 없는 상태로 봤는데 콘솔창을 확인하면 k1뿐만 아니라 k1 = 3을 하였을 때의 3에 해당하는 객체도 어딘가에 존재를 하는거 같은데 3이라는 정수를 컴파일러가 타입변환 생성자로 받아들여서 인자를 하나만 받는 Knight객체를 만들어서 '=' 연산자를 통해 k1에다가 멤버 변수를 다 덮어 씌우는데 정수 3을통해서 만들어진 객체도 스택에 올라간 다음에 값만 k1이라는 객체에 덮어 씌우는건가요..?? 맞는말인가요..???
-
미해결홍정모의 따라하며 배우는 C++
&의 쓰임
*의 쓰임이 2가지(1. 포인터 선언 시 포인터임을 나타내는 표시, 2. de-referencing)로 나뉘어지는 것처럼, &의 쓰임도 2가지(1. reference선언 시 reference임을 나타내는 표시, 2. 주소)로 나뉘어진다고 생각해도 될까요? 예를 들어 void addOne(int &y) { cout << &y << endl;} 란 코드가 있을 때, int &y는 reference선언할 때와 같은 쓰임이어서 인자가 reference에 의해 들어오는 거라고 해석하는 것이고, cout 출력할때의 &y는 주소의 쓰임으로 해석하는 것이라고 해도 될까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
이다솜 문제 시간초과.. ㄷㄷ
안녕하세요 강사님~! 강의 잘 보고 있습니다. 다름이 아니라 강사님 코드와 거의 흡사한데, 시간초과가 떠서 뭐가 빠졌나 하고 보니까 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 이걸 넣으니 맞았다고 하는데.. 이 코드가 시간초과에 영향이 큰지 여쭤보려고 합니다.. 아래는 시간초과한 코드이고 여기에 상단의 코드를 넣으니 답으로 인정해줬습니다! #include <bits/stdc++.h> using namespace std; int n, m; string buf; map<string, int> mp; map<int, string> rmp; int main() { cin >> n; cin >> m; for (int i = 0; i < n; ++i) { cin >> buf; mp[buf] = i + 1; rmp[i + 1] = buf; } for (int i = 0; i < m; ++i) { cin >> buf; if (atoi(buf.c_str()) != 0) { cout << rmp[atoi(buf.c_str())] << "\n"; continue; } cout << mp[buf] << "\n"; } return 0; }
-
미해결홍정모의 따라하며 배우는 C++
9:05 변수 count에 대해
변수 my_var과 count 모두 namespace a에 선언했는데 왜 count만 namespace std에 존재해서 오류가 나나요 ? 명확히 이해하지 못해 질문 드립니다 !
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수객체론 해결을 하지 못하고 함수 포인터를 사용해야만 하는 상황이 있을까요?
함수 포인터와 함수 객체에 대해서 강의를 들었습니다. 강사님께서 함수 포인터에겐 진행상황을 저장할수 없다는 단점이 있어, 클래스를 이용해 함수 객체를 이용하면 단점이 보완가능하다고 설명해주시고, 함수 객체 또한 매게 변수로 사용이 가능한걸로 아는데, 그렇다면 함수포인터는 함수 객체로 대체해서 쓰면 가능하지 않나요? 아니라면 함수 객체로만 해결이 가능한 그런 상황이 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요. 강사님 교안 관련 질문 드려봅니다.
최근에 수강을 결심하고 결제한 수강생입니다. 지금 교안을 다 들여다 보고 있는데 메소드 / 함수 구분 없이 전부 다 함수로 표기되어 있어 보는데 혼동이 올 때가 가끔씩 있습니다. 혹시 메소드 / 함수 구분을 추후에 표기하실 생각이 있으신가요? PS. 그리고 14페이지에 추구 -> 추후 오타입니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-C 게리맨더링 모든 경우의 수 질문
https://www.acmicpc.net/source/share/13099fe68b2a4674aa92e2b5ca5aa0dd (n은 6이라고 가정) 해설 코드 34번째 줄모든 경우의 수를 for(int i=1; i < (1 << n) - 1; i++)로 설정한 이유가 궁금합니다. 한 구역으로만 이루어진 111111인 경우를 제외하기 위해서 n이 6인 경우 i는 1부터 111110 (62) 까지 경우를 확인하는 건가요 ?
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
sizeof arr에서
3분 50초 쯤에서 sumArr함수 내에서 전달받은 arr의 size를 구할 때 , 제 코드상에선 전달받은 arr의 size가 8이 나오는데 이유가 무엇인지 궁금합니다 ㅠㅠ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문있습니다.
pair<int,int> 를 쓰지않고 1000*y + x를 쓰는데에 특별한 이유가 있나요 ? 로직은 거의 비슷한데 pair를 썼을때 실행시간이 170ms 정도 되는데 강사님의 풀이는 4ms 밖에 안돼서 퍼포먼스에 지대한 영향이 있는건지 궁금합니다
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
부동소수점의 지수 부분
안녕하세요 실수를 표현하는 방법 중 지수 부분이 조금 관심이 가서 인터넷을 찾아봤는데 00000000과 11111111은 사용이 안되어서 00000001 ~ 11111110까지 활용이 가능하다고 하더군요.. 여기까지는 그렇구나 했는데 이게 10진수로는 -126 ~ 127이라고 해서 많이 헷갈립니다... 1바이트인 char의 경우에는 -128 ~ 127까지가 표현범위인 것으로 알고 있고 00000001 ~ 11111110이면 -127 ~ 126이 되어야된다고 생각하고 있었거든요 중요한 부분인지는 잘 모르겠지만 순수하게 궁금합니다... p.s. 새로운 내용들을 공부할 때마다 예전에 배웠던 내용들 중 잘 사용하지 않는 부분들은 자꾸만 잊어버리는데(ex - bitflag) 좋은 방법이 있을까요?;;
-
미해결홍정모의 따라하며 배우는 C++
하위 네임스페이스에서 상위 네임스페이스의 함수에 접근할 수 있는 이유?
MySpace1안의 InnerSpace라는 하위 네임스페이스에서MySpace1의 함수인 doSomething(int a, int b)을 호출해보았습니다.InnerSpace에서 MySpace1의 함수에 접근할 수 있는 이유가 뭔가요?main에서 함수를 호출하는 원리와 같은가요? namespace MySpace1{ int doSomething(int a, int b); namespace InnerSpace { int my_function() { cout << doSomething(3, 4) << endl; return 0; } } int doSomething(int a, int b) { return a + b; }}
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
람다식과 함수포인터 관련 질문입니다.
위와같이 람다함수를 함수포인터에 대입하는건 에러가 안나는데 람다 캡처 블록에 값표시(=),참조표시(&)를하면 에러가 생기는데 이유를 모르겠습니다.
-
미해결[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문
바이트와 관련하여서 질문이 있습니다
1비트에는 2가지가 들어갈 수 있고 8비트는 1바이트로 2^8 = 256가지가 들어갈 수 있다는 것을 찾아보았는데요 그렇다면 short의 경우에는 최대 바이트가 2바이트이며 가짓수가 -32767 부터 0 32767까지 이잖아요 근데 여기에서 제가 2바이트를 계산해본 결과 256*256 = 65536이고 이를 2로 나누면 32768인데 그렇다면 디버그해서 나온 값인 32767의 값은 0을 제외하고 계산하여서 이 값이 나온건가요? 어떻게 해서 32767이 나오게 된 건가요? (unsigned을 했을 경우 66535입니다)
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
메모이제이션 관련 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 좋은 강의 감사드립니다. 한 가지 이해가 되지 않는 부분이 있어 질문드리려고 합니다. 트리를 일일이 뻗지 않게 하려고 메모이제이션을 쓴다고 뒷부분에서 말씀하셨는데, 26분 13초에 그림을 보니 unf[v] = Find(unf[v])를 하는 것 자체가 계속 가지가 뻗는 것처럼 보입니다. 그냥 가지를 뻗는 것과, 메모이제이션이 똑같다는 느낌을 받는데, 혹시 차이가 정확히 어떤 것인지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
size() 대신 length() 사용해도 무방한가요
구글링을 해보니 return 값은 동일하다고 하는데 length()대신 size를 사용하는 특별한 이유가 혹시 있나해서 질문합니다.