본문 바로가기

전체 글

(180)
[알고리즘] 버블정렬 쉽게 생각하기 정렬(Sort)를 할 때 가장 기초적으로 생각할 수 있는 것은 "오른쪽부터 제일 큰 수를 차근차근 쌓아올리겠다" 입니다. 왼쪽을 기준으로 숫자를 세어나가면서 큰 수를 만나면 바로 오른쪽으로 밀어버리면서 정렬을 진행하는 것입니다. 즉, 오른쪽 기준점에 가장 큰 수 i를 두겠다는 목표를 두고 j가 0부터 i가 있는 지점(i-1)까지 하나하나씩 바로 오른쪽에 숫자와 비교를 하여 큰 수를 오른쪽에 두면 됩니다. 그렇게 하면 결국 j가 0에서 i-1이 되었을 때에는 i번째와 비교하면서 i번째까지 중에 가장 큰 수를 오른쪽에 둘 수 있게 됩니다. j가 0에서부터 i-1까지 한 번 가면 기준점 i에 가장 큰 수가 배치되게 됩니다. 그 다음에는 기준점 i의 다음점 i+1에 가장 큰 수를 찾아야 되고, j는 0에서부터 ..
[C++/JAVA] 연산자부터 메소드까지 메소드 이전에 연산자가 있습니다. 연산자는 산술(+-*/%)연산자, 비교(> int i = 0; while(i>0){ 실행 코드; i++; } 그런데 위와같은 형태가 자주 쓰이다 보니, for문이 등장하였습니다. for(초기값; 조건절; 증감식){ 실행 코드; } EX> for(int i=0; i
[C++/JAVA] 변수부터 배열, 구조체까지 발전 과정 모든 프로그래밍은 변수와 메소드로 이루어져있습니다. 그리고 변수와 메소드를 기능별로 묶은 것을 클래스라고 합니다. 일종의 레고나 부품처럼 끼워 맞추면서 프로그래밍을 진행하게 됩니다. 이번에는 변수가 왜, 나왔고 어떻게 발전되는지를 알아보겠습니다. 변수 이전에는 상수가 있었습니다. 그런데, 상수는 constant number 常數 항상 같은 값을 갖은 수 이기 때문에, 프로그래머가 직접 값을 바꿀 수가 없었습니다. 프로그램을 만들려면 게임을 하는데 점수가 오르는 등의 값이 변화하는 것이 필요합니다. 이를 위해서 변수가 등장했습니다. 변수는 상수에다가 이름을 붙여서 관리를 편하게 해줍니다. #include int main(void){ //상수를 직접 호출하는 경우는 코드 영역에서 실행된다. printf("5..
[알고리즘] 알고리즘에서 배워야 할 기초 알고리즘은 문제를 해결하는 순서를 의미합니다. 알고리즘을 수행하기 위해서는 가장 먼저 자료가 있어야 합니다. 이를 위해서 가장 먼저 자료구조를 배웁니다. 자료구조는 문제 해결을 위해 가장 효율적으로 자료를 조직하고 구조화하는 활동을 의미합니다. 자료구조는 크게 선형과, 비선형으로 나뉩니다. 선형에서는 스택, 큐, 배열, 연결리스트 등이 있습니다. 비선형 구조에서는 트리와 그래프가 있습니다. 자료가 저장이 되어있다면, 자료를 보기 좋게 정렬합니다. 버블정렬, 삽입정렬, 선택정렬이 가장 기본적인 정렬입니다. 좌우가 붙은 것이 버블처럼 움직인다고 해서 버블정렬이라고 이름붙였습니다. 삽입정렬은 특정 기준 점 이전에 것을 전부 비교한 뒤에 삽입한다고 해서 삽입정렬입니다. 선택정렬은 i이후에 가장 작은 것을 찾아서..
[C++/JAVA] 클래스패스와 패키지 클래스패스란? 클래스패스는 컴퓨터에 저장되어 있는 클래스가 어디에 위치하는지 지정한 것이다. 예를 들어서, 클래스가 2개라면 컴파일 했을 때 두 개의 .class파일이 만들어진다. 컴파일 후 실행하면, .bin에서 main함수를 찾아 실행되고 Item2의 클래스를 인스턴스화 한다. 그런데 만약 Item2가 같은 경로(path)에 있지 않다면(같은 패키지) 에러가 발생한다. 이 경우 누락된 Item2클래스의 경로를 지정하면 된다 만약 cmd창에서 직접 컴파일한다면 classpath를 지정해줘야한다. java -classpath ".;lib" ClasspathDemo -classpath옵션은 ClasspathDemo2클래스가 필요로 하는 클래스가 있다면 현재 디렉터리에서 일단 찾아보고 없으면 옵션에 딸려있는..
[C++/JAVA] .src와 .bin폴더의 역할 자바에서 프로젝트를 실행한 뒤에 보통 아래와 같이 패키지와 클래스를 만듭니다. 클래스를 만들면 아래와 같이 src파일에 패키지가 만들어지고, 패키지 않에 .java파일이 생성되게 됩니다. 해당 경로에 실제 가 보면 src파일 말고도 bin파일도 있게 됩니다. 여기서 자바의 컴파일 과정을 통해 src와 bin파일의 역할을 알아보겠습니다. .src는 .java의 소스파일이 있는 곳이다. 사람이 이해할 수 있는 코드가 있습니다. .bin은 .class의 binary파일이 있다. 컴퓨터(JVM)가 이해할 수 있는 코드가 있습니다. .java를 먼저 컴파일러를 통해 bytecode를 만듭니다. 그러면 해당 파일는 바이너리 파일이 되어서 .class파일로 .bin폴더에 저장되게 됩니다. 그리고 run을 하게 되면 ..
[C++/JAVA] JVM은 기생충처럼 동작한다. Java는 Linux, Window의 운영체제와 상관없이 돌아갑니다. 운영체제가 쓰는 언어의 차이는 한국어와 미국어의 차이라고 보셔도 됩니다. Linux에서 만든 파일이나 문서는 Window의 파일의 문서로 읽힐 수가 없습니다. 그런데 웹브라우저에서는 운영체제와 상관없이 문서를 읽는데 이것은 바로 JVM덕분입니다. 이 JVM은 가상머신으로 동작하는데, 가상머신은 컴퓨터에 기생충처럼 동작합니다. 이 과정을 이해하기 위해 소스코드가 컴파일되서 실행되는 동작을 먼저 살펴보겠습니다. 먼저 Java로 소스코드를 작성하면, 이것은 컴파일러를 통해 컴퓨터가 이해할 수 있는, Obj로 변환됩니다. 그런데 이 컴퓨터의 언어로 window, linux, mac마다 다릅니다. 비유를 해드리면, 윈도우는 미국인이고, 리눅스는..
[C++] #import <헤더파일>시에 일어나는 일들 #include 은 컴파일러가 설치된 폴더에서 ‘헤더파일’을 찾으라는 지시입니다. 만약에 #include 을 선언하면 main()함수 안에 strcpy()를 사용할 때, cstring에서 strcpy() 함수를 찾는 것이 아닙니다. 헤더파일에는 strcpy()함수가 실제로 들어있지 않습니다. 헤더 파일은 strcpy()함수의 선언만 들어있으며, strcpy()가 호출되면 C라이브러리 코드를 호출함. 컴파일 할 때 의 역할은 strcpy()함수의 호출이 정확한지 판단하는 데 사용됩니다. 그러면 실제로 Visual Studio에서 실제로 헤더파일이 import되고 과 같은 헤더 파일 내부를 들여다보면 된다. 실제로 위와 같이 헤더파일을 선언하면, 헤더 파일위치로 가서 함수가 맞는지 확인한 뒤에, C++라이브..