728x90

프로그래밍 138

C++ 입력 함수 / cin, cin.get(), getline()

cin - 에 포함되어 있다. - 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다. - 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다. - 개행 문자를 입력 버퍼에 남겨둔다. 즉, cin으로 입력을 받게되면 공백문자에서 입력을 끊는다. 이러한 문제를 해결하기 위해서는 getline()이라는 함수를 사용해야한다. getline() getline()함수는 아래 두가지 라이브러리에 있다. 1. #include 2. #include istream에는 cin.getline()이 들어있다. - 문자 배열이며 마지막 글자가 '\0'(terminator)인 c-string을 입력 받는데 사용 - n-1개의 문자 개수만큼 읽어와 str에 저장 (n번째 문자는 NULL('\0')로 바꾼다.) - 세번..

C언어와 C++의 차이점이 무엇이 있을까?

자료구조 공부와 코딩테스트 준비를 하려다 보니 윤성우의 열혈자료구조에서는 C언어를 다루고 코딩테스트에서는 C++을 이용하려고 하여 두 언어의 차이점을 먼저 살펴보고자 한다. C는 우리가 프로그램이란것이 이런것, 포인터, 메모리란 이런거구나 이런부분을 배울 수 있다면 C++는 C의 언어적 특성들을 가져와서 객체지향형 프로그래밍이 가능하다는 점이다. C++을 통해 좀 더 업그레이드 된 프로그램을 경험 할 수 있다. C와 C++을 비교해보자 C 키워드 1. 데이터형 char, int, short, long, unsigned, float, double, struct, union, typedef *union: 하나의 데이터형을 비트단위로 짤라서 사용할 수 있도록 해줌 2. 반복문 for, while, do whi..

캐시 메모리 / 메모리 계층구조 / 참조 지역성 원리

CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 압도적으로 느리다. >> 성능적으로 엄청난 손해가 난다. >> 메모리에 접근하는 시간을 줄일 필요가 있다. 저장 장치 계층 구조 (Memory hierarchy, 메모리 계층 구조) - 여기서 메모리는 RAM을 의미하는것이 아니다. - 일반적인 저장장치를 의미한다. 1) CPU와 가까운 저장장치는 빠르고, 멀리있는 저장장치는 느리다. 2) 속도가 빠른 저장장치는 저장 용량이 작고, 가격이 비싸다. 예시: 레지스터 vs RAM vs USB 속도: 레지스터 > RAM > USB 용량: USB > RAM > 레지스터 가격: 레지스터 > RAM > USB 캐시 메모리 - CPU와 메모리 사이에 위치해있다. - 레지스터보다 용량이 크고 메모리 보다 빠른 S..

메모리의 주소공간 - 물리주소와 논리주소

* 메모리를 학습하는데 있어서 주소공간은 굉장히 중요한 개념이다. 메모리내의 주소체계는 크게 2가지가 있다. 1. 물리주소 2. 논리주소 CPU와 실행중인 프로그램의 입장에서 바라본 논리주소 실제 하드웨어 주소번지에 해당하는 물리주소 CPU는 실행중인 프로그램이 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까? NO / 메모리에 저장된 값들은 시시각각 변하며 새롭게 실행되는 프로그램은 새롭게 메모리에 적재된다. 실행이 끝난 프로그램은 메모리에서 삭제되고 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라지기 때문에 CPU는 실행중인 프로그램이 현재 메모리 몇번지에 어떻게 저장되어있는지 다 알고있지 못한다. 이런 점때문에 논리주소가 생겼다. 논리주소 - CPU와 실행중인 프로그램..

C언어, 재귀함수로 하노이타워 구현하기

하노이타워를 C언어로 공부하면서 재귀라는 부분을 실제 코딩을 하며 어떻게 떠올릴 수 있을지가 가장 재미있는 부분이라고 생각했다. 실제로 그냥 머리속에서 하노이타워를 어떻게 구현할지 고민할때는 해답이 떠오르지가 않았다. 분명히 반복되는 부분이 있을것같은데, 머리속에서 찾을 수가 없었다. 윤성우님께서 문제를 내주실때도 알고나면 너무 쉬울것이라고 고민해 보는 시간을 꼭 갖고 해답을 보면 좋을것같다고 하였는데. 아니나 다를까 듣자마자, 정말 탁 트이는 기분이 들었다. 이제는 하노이타워는 언제든지 구현할 수 있겠다는 생각이 드는데 아직도 프로그래밍을 하다가 재귀를 떠올릴 수 있을것 같다는 확신이 들지는 않는것 같다. 반복되는 부분이 있다면 고민 꼭 해보자 void Hanoitower(int num, char fr..

함수의 재귀적 호출

이번 강의의 목표는 하노이 타워를 이해하는것이다. 특징 1. 제일 첫번째로 호출된 함수가 제일 마지막으로 종료가 되는 특징을 갖고있다. 2. 재귀에서 탈출조건을 반드시 명시해야한다. 그렇지 않으면 무한 반복하게된다. > 요즘은 운영체제가 너무 좋아져 가상메모리를 잘 잡아줘서 뻗는데까지 오래걸릴테지만 그래도 뻗는다. 디자인 사례 가장 대표적인 사례로 수학에서 펙토리얼이 있다. 이진 탐색 알고리즘의 재귀 구현 int BSearchRecur(int ar[], int first, int last, int targer) { int mid; if(first > last) return -1; mid = (first + last) / 2; if(ar[mid] == targer) return mid; else if(ta..

RAM의 특성과 종류

RAM의 특징 - CPU는 메모리로부터 명령어와 데이터들을 갖고와서 실행한다. - 렘은 실행할 대상을 저장하나 전원이 꺼지면 기억을 잃어버린다. RAM의 종류 1. DRAM - Dynamic RAM - 저장된 데이터가 동적으로 사라지는 RAM - 데이터 소멸을 막기 위해 주기적으로 재활성화가 필요함 - 일반적인 메모리로 사용되는 RAM이다 > 상대적으로 소비전력이 낮고 저렴하며 집적도가 높다. > 집적도가 높아 빽빽하게 설계가 가능하여 대용량의로 설계가 용이하다. 2. SRAM - Static RAM - 저장된 데이터가 사라지지 않는(정적인) RAM - DRAM보다 일반적으로 더 빠르다. - SRAM도 전원이 꺼지면 휘발되는것은 똑같음 - 일반적으로 캐시 메모리에 사용되는 RAM이다. > 상대적으로 소비..

[백준] 11720번 C,C++ 초기화를 안해 틀려버린

SUM값을 초기화를 하지 않아 연속하여 틀렸었다. 쓰레기 값이 들어가 있을 수 있으므로 초기화 하는 습관을 들이자 틀렸던 코드 1번 원인 : 연속된 숫자가 입력이 들어온다는 부분이 string으로 받아야 한다는 생각을 못했다. 틀렸던 코드 2번 원인 : SUM을 초기화 하지 않아, 쓰레기값이 들어있어 오류가 발생하였다. // 틀렸던 코드 1번 #include int main() { int n; int sum; for(int i =0; i < n; i++){ scanf("%d",&n); sum += n; } printf("%d",sum); } // 틀렸던 코드 2번 #include int main() { int n, sum; char arr[101]; //배열 선언 scanf("%d",&n); scanf(..

명령어 집합구조, CISC & RISC

명령어 집합 - CPU가 이해할 수 있는 명령어들의 모음을 말한다. - 예를들어 인텔의 CPU는 일반적으로 x86(x86-64) 명령어 집합을, 애플의 CPU는 일반적으로 ARM 명령어 집합을 따른다. - 명령어 집합은 CPU가 이해할 수 있는 명령어들의 모음을 말하므로, 결국 인텔의 CPU에서 만든 실행파일을 맥으로 옮겨서 실행을 하려고 하면 실행이 안된다. -> ISA(명령어 집합)은 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속. CISC & RISC 1. CISC(Complex Instruction Set Computer) - 복잡한 명령어 집합을 활용하는 컴퓨터 - x86 / x86-64 1) 장점 - 복잡하고 다양한 명령어 활용이 가능하다. - 명령어의 형태와 크기가 다..

Overloading과 Overriding / method Signature 알아보기

Overriding의 핵심은 상속이다. - 부모 클래스의 속성과 기능을 그대로 사용하고 상속 받은 자식클래스에서 overriding한 해당 기능만 다시 수정하여 사용할 수 있게 하는것이다. 부모클래스에서 virtual 키워드를 사용한 함수에 대해서 재정의가 가능하다. Overloading의 핵심은 Method Signature이다. 나는 기억속에 return값 또한 overloading에 영향을 주는 것으로 기억하고있었다. 하지만 중요한것은 method Signature였다. Method Signature는 메소드 명과 그 함수의 매개변수를 뜻하는데 Method Signature가 다르지 않다면 같은 함수로 인식하게 되어 return값이 다르더라도 빨간 밑줄이 생기게 된다. 따라서 다형성을 위해 Over..

728x90