본문 바로가기

전체 글238

[자료구조 4장] - 연결리스트(4) 연결리스트(4) 원형 연결리스트 구조와 구현방법 단순 연결리스트의 마지막 노드 포인터 : NULL 이 마지막 노드 포인터를 첫 번째 노드(head node)의 주소를 가리키도록 할 때 이 리스트를 원형 연결리스트 라고 한다. 원형 연결리스트의 장점 : 어느 하나의 노드로부터 다른 모든 노드로 접근 가능, 검색 시 처음부터 찾지 않고 현재 노드부터 검색 가능, 리스트 결합도 효율적 주의 : 검색을 끝낼 수 있는 노드가 있어야 한다. 없으면 무한루프에 걸릴 수 있다. 학생번호와 학점을 노드에 저장한 자기참조구조체 struct cnode를 다음과 같이 정의하고 이를 기본으로 원형 연결리스트의 구조와 구현방법에 대하여 알아보자. typedef struct cnode *npointer; struct cnode {.. 2024. 2. 18.
[자료구조 4장] - 연결리스트(3) 연결리스트(3) 응용 프로그램 동물연결리스트 예제 동물농장에 있는 5가지 동물의 종류(문자배열)와 동물의 수를 연결리스트로 구축하여 출력하는 프로그램을 작성하자. 우선 dog 10 하나의 데이터 항목 1개의 노드가 초기에 주어져 있고 4가지 동물의 종류와 동물의 수를 받아 차례로 연결하는 프로그램이다. typedef struct fnode *fpointer; struct node { char animal[10]; int item; fpointer next; }; void main() { fpointer head=NULL, ptr, another, before; int k, how_many=0; head = (fpointer) malloc(sizeof(struct fnode)); strcpy(head->a.. 2024. 2. 8.
[자료구조 4장] - 연결리스트(2) 연결리스트(2) 단순 연결리스트 구조와 연결방법 저장하려는 연결리스트 구조의 노드들은 첫 노드부터 꼬리에 꼬리를 물고 한 방향으로 연결되어 있으며 마지막 노드의 포인터는 NULL 값을 가진다. ex) 문자열의 집합 {"bake", "cake", "sake", "take"}을 알파벳 순서로 연결리스트에 저장하는 경우 헤드 노드 : 첫 번째 노드의 포인터 헤드 노드의 포인터를 잃으면 리스트 안의 전체 데이터에 접근할 수 없게 된다. 화살표는 다음 자료의 기억 장소 번지이며, 마지막 노드의 다음 데이터는 없으므로 NULL값을 가지게 된다. 이렇게 단순 연결리스트는 헤드 노드로부터 NULL 값을 가지는 노드까지 한 방향으로 연결되어 있다. 연결리스트를 사용하여 프로그램을 작성할 때, 리스트의 끝을 검사하는 경우.. 2024. 1. 30.
PALWORLD, 흥행 성공한 총켓몬? PALWORLD, 흥행 성공한 총켓몬? 이번에 알아볼 게임은 새로운 흥행 바람을 불러일으키고 있는 팰월드? 팔월드? 입니다. 저는 팰월드라고 부르겠습니다. 총켓몬? 무너진 장르의 경계 우선 이 게임은 1월 19일에 스팀에 출시된 유료게임으로 가격은 대략 29000원 정도이고, 언리얼엔진 5로 제작되었습니다. 그런데 우리가 살펴봐야 할 것은 이 게임의 장르입니다. 해당 게임의 장르를 나무위키에 검색해보면 오픈월드, TPS, 샌드박스, 서바이벌 이라고 나옵니다. 한마디로 거의 모든 장르가 짬뽕되어있다는 뜻입니다. 이에 사람들은 총쏘는 포켓몬, 젤다, ARK 등 다른 게임요소 여러 개를 섞어놨다는 이야기가 많습니다. 저작권, 새로운 게임 이 게임에는 몬스터로 등장하는 "팰" 이라는 존재들이 있는데 생김새가 우.. 2024. 1. 24.
[자료구조 4장] - 연결리스트(1) 연결리스트(1) 포인터와 연결리스트 순차리스트와 연결리스트 배열로 구현된 순차리스트 구조는 연속적인 순서를 유지해야 하기 때문에 다음과 같은 단점이 있다. 1. 리스트 중간에 자료를 삽입, 삭제하기 어렵다. 2. 리스트의 크기나 모양을 바꾸고자 하는 경우 문제가 발생한다. 3. 프로그램 수행 도중 리스트의 크기가 가변적이라면 최대 크기를 산정하여 처음부터 미리 이를 준비해 두어야 하므로 기억장소를 낭비하게 된다. 이와 같은 단점을 보완하기 위한 방법으로 자료와 그다음 자료의 위치를 하나의 단위로 저장하여 연결고리 형태로 리스트를 구성하는 연결리스트 구조가 제안되었다. 배열과 같은 리스트의 구조는 데이터 크기가 컴파일 시간에 정해진다. 연결리스트는 삽입과 삭제가 자주 일어나고 크기가 가변적인 경우 편리한 .. 2024. 1. 20.
[자료구조 3장] - 배열과 구조체(3) 배열과 구조체(3) 구조체 필드 : 어떤 객체를 표현하는 속성 레코드 : 필드들의 모임 구조체 : 여러 개의 레코드를 테이블로 저장하여 처리하는 관계형 데이터베이스 시스템 처럼 레코드 데이터를 위해 마련된 C 프로그램의 자료구조 구조체의 정의와 응용 구조체는 다양한 자료형의 연관된 자료를 묶어 새로운 자료형을 만들어 준다. 키워드 struct를 이용하여 member를 구초제 태그 이름으로 정하여 중괄호 사이에 연관된 자료를 다음과 같이 선언하면 struct member라는 새로운 타입이 생긴다. struct member { int id; char name[20]; float score; }; 구조체가 마련되었다면, 다음과 같은 선언문으로 프로그램에서 변수로 사용하게 된다. struct member one.. 2024. 1. 14.
[메이플스토리] - 메이플의 대격변! 앞으로의 미래는? 메이플의 대격변! 앞으로의 미래는? 안녕하세요 바로 어제 메이플스토리 관련 글을 작성하였는데, 정말 쉬지않고 사건이 터진다는 것을 증명하듯이 바로 어제 다시 한번 큰 사건이 하나 발생하였습니다. 바로 본론으로 들어가겠습니다. 확률조작사태 이후, 긴급 라이브 방송 앞서 작성한 글에 이어지는 내용입니다. 큐브 확률조작으로 인해 공정위에게 116억원의 과징금을 맞고 사람들이 충격에 빠져있던 도중, 바로 어제인 2024년 01월 09일에 긴급 라이브방송이 켜졌습니다. 사람들은 "지금 라이브 방송을 킨다고?" 같은 당황한 반응을 보였고 라이브 방송의 내용을 보고서는 더 큰 충격에 빠지게 되었습니다. 큐브 메소화, 메소 획득 제한, 리부트 너프 갑작스럽게 시작한 라이브 방송이지만, 메이플의 근간을 뒤흔들 엄청난 내.. 2024. 1. 10.
[메이플스토리] - 보보보와 환불사태 그리고 확률조작 보보보와 환불사태 그리고 확률조작 안녕하세요. 이번에는 사건이 쉬지 않고 터지는 메이플스토리에 대한 내용을 들고 왔습니다. 메이플스토리는 최근 20주년을 맞이하여 대규모 업데이트로 6차전직이 등장한 바가 있습니다. 그럼 바로 내용을 들어가보도록 하겠습니다. 사건의 전말 지금 이야기하는 토픽에는 긴 시간이 녹아있습니다. 발단이 되는 사건은 2021년도에 터진 "보보보사태"와 "환불사태"입니다. 메이플에서 가장 좋다고 여겨지는 옵션인 "보스 몬스터 공격시 데미지" 옵션이 잠재능력에서 총 3줄로 등장하는 보보보가 시스템 상에서 등장할 수 없다는 내용을 유저들에게 고지하지 않은 점, 그리고 "환불사태"는 특정 패치노트에서 장비의 추가옵션을 재설정하는 아이템인 환생의 불꽃의 추가옵션 등장확률을 균일하게 바꿨다는 .. 2024. 1. 10.
[자료구조 3장] - 배열과 구조체(2) 배열과 구조체(2) 배열 응용 프로그램 배열의 차원 : 배열의 각 항목에 접근하기 위해 필요한 인덱스의 수 자료의 형태가 그려지지 않으면 프로그래밍에서 다루기 쉽지 않기 때문에 1, 2차원 배열이 주로 활용된다. 실습 프로그램 - 1차원 배열에 n개 데이터 읽어들여 평균을 구하고 평균보다 더 큰 값의 데이터 수를 구하는 프로그램 - 영어학원에 4개의 시간에 3분의 강사가 수업을 개설했을 때, 각 시간의 각 선생님께 수강 신청한 학생의 수를 2차원 배열에 입력받아 저장하고 각 선생님 클래스의 학생수를 출력해주는 프로그램 - 전화번호부 정보를 가지는 문자열의 2차원 배열, 즉 문자형의 3차원 배열에 이름과 전화번호 데이터를 준비하고 있다고 하자. 이때 전화번호부에 저장 되어 있는 이름을 순서대로 번호를 붙여.. 2024. 1. 7.
[자료구조 3장] - 배열과 구조체(1) 배열과 구조체(1) 배열 배열 : 각 원소의 위치 정보를 나타내는 인덱스와 데이터 값의 쌍으로 이루어지는 같은 자료형을 갖는 데이터들의 집합 학습할 개념 - 배열의 접근과 주소계산 - 배열의 연산 : 삽입, 삭제, 검색 - 배열 응용 프로그램 : 1차원, 다차원 배열 - 마방진 알고리즘 구현 배열의 접근과 주소계산 배열이 가지는 3가지 정보 1. 배열 항목의 자료형 2. 배열의 이름 3. 배열의 크기(한목의 개수) ex) int a[10] 배열은 인덱스를 두 개 이상 사용할 수 있다 -> 인덱스 수에 따라 차원(dimension)이 정해짐 ex) a[10] : 1차원 배열, b[10][5] : 2차원 배열 배열의 크기는 차원 범위의 곱 ex) a[3][11][6] : 3차원 배열, 3 * 11 * 6 =.. 2024. 1. 2.
[자료구조 2장] - 프로그래밍 기초(3) 프로그래밍 기초(3) 함수의 매개변수 함수를 작성하기 전에 함수 코드가 수행해야 하는 기능 정의를 명확하게 함과 동시에 함수이름, 함수 매개변수(parameter) 각각의 자료형과 함수 결과값의 자료형을 결정해야 한다. 그 중 매개변수는 C 프로그래밍에서 값에 의하여 참조(call by value) 되므로 함수의 입력값의 역할을 한다. 배열을 매개변수로 넘겨주기 배열의 대표적인 정보 넘겨주기 -> 첫 데이터의 주소 포인터를 매개변수로 넘겨주기 void main() { int x, y, z; printf("세 수를 입력하시오. "); scanf("%d %d %d", &x, &y, &z); if(x > y) swap(&x, &y); if(y > z) swap(&y, &z); if(x > y) swap(&x,.. 2024. 1. 1.
[자료구조 2장] - 프로그래밍 기초(2) 프로그래밍 기초(2) 함수와 재귀호출 C프로그래밍은 함수들의 모임과 활용으로 구성 표준 입출력 함수 : printf / scanf => 표준 라이브러리에 작성되어 있는 함수 활용 라이브러리 사용 -> 함수의 정의를 포함하는 헤더파일을 include 시켜야함 개념 - 함수의 원형 - 함수의 정의 - 매개변수 - 값에 의한 호출 함수의 원형 : 함수 반환값의 형(type)과 함수이름(function_name), 각 매개변수의 형과 이름을 포함 type function_name(type1 parameter1, type2 parameter2, .... typeN parameterN) 재귀함수(recursive function) int my_pow(int x, int y); void main() { int k; .. 2023. 12. 30.