본문 바로가기

분류 전체보기58

[C언어와 함께 자료구조를] 연결리스트로 큐 구현하기 큐 개념 다시 보기 큐는 줄, 대기행렬 이라는 의미가 있습니다. 줄서서 먹는 맛집은 온 순서대로 들어가게 되는 것과 같은 개념이라고 생각하시면 됩니다. 큐를 대표하는 말은 선입선출( FIFO : First In First Out)인데요, 거꾸로 생각하면 후입후출(LILO : Last In Last Out)도 틀린 말은 아닌 것 같습니다. 큐의 연산도 딱 두가지 put과 get입니다. 뭐 책에 따라서 enqueue, dequeue라는 말도 쓰이긴 하지만 의미만 통하면 별 문제는 없어 보입니다. put은 큐에 데이터를 넣는것, get은 큐에서 데이터를 가져오는 것입니다. 연결리스트로 큐 구현하기 배열을 이용한 큐에서는 큐의 크기가 정해져 있었지만, 연결리스트에서는 그런 제약조건이 없습니다. (이론상 컴이 더.. 2020. 7. 29.
[C언어와 함께 자료구조를] 연결리스트로 스택 구현 스택 개념 다시보기 스택(Stack)은 단어의 뜻에서 의미하듯 쌓아 놓는 구조로 매우 간단합니다. 예를 들면, 책 10권을 차례대로 쌓았다고 하면 책을 치우기 위해서 맨 위에서 부터 차례차례 치워나가는 방식이라고 할까요? 가장 나중에 쌓은 책이 먼저에 치워지니 LIFO(First-In Last-Out)이라고도 하고 가장 먼저 쌓은 책이 나중에 치워지니 FILO(First-In Last-Out)이라고도 부를 수 있겠네요. 스택을 조작하는 연산은 딱 두가지만 기억하자고 했는데. 스택에 집어넣는 연산 push와 스택에서 빼내는 연산 pop입니다. 연결리스트로 스택 구현하기 스택의 구현은 배열을 사용하던 연결리스트(Linked list)를 사용하던 상관없지만, 이전 포스팅에서는 연결리스트를 이용한 스택을 구현해.. 2020. 7. 29.
숫자가 2배씩 증가하면? 1. 쌀 한 톨을 주세요! 옛날 어느 나라의 왕이 신하가 큰 공을 세워 상을 내리려고 했습니다. 신하는 왕이 쌀 100 가마니를 준다는 말을 듣고 다음과 같이 제안했습니다. "전하! 제가 원하는 건 쌀한톨이옵니다. 다만, 매일 전날 받은 것의 2배를 늘려가며 쌀을 100일 동안 받고 싶습니다." 신하는 첫날 쌀한톨, 둘째 날 첫째 날의 2배인 쌀 2톨, 그다음 날 전날의 2배인 쌀 4톨, 그다음 날은 전날의 2배인 쌀 8톨 이런 식으로 늘려가며 100일 동안 받겠다고 이야기했습니다. 왕이 생각하기에 쌀 한 톨씩 100일 동안 늘려가 봤자 10~20 가마니면 충분하다고 여겨 신하의 어리석음을 비웃었습니다. 왕은 곡물을 관장하는 신하에게 공을 세운 신하의 말대로 수행하라 일렀습니다. 곡물을 관장하는 신하가 .. 2020. 7. 28.
[즐거운 수학퀴즈] 가짜금화와 저울 1. 무게저울 한번쓰고 가짜금화 찾기 금화가 가득 든 자루가 열개가 있습니다. 이 가운데 한 자루는 가짜 금화인 9g짜리로 차있고 나머지는 진짜 금화인 10g짜리 입니다. 무게 저울을 꼭 한번만 사용해서 가짜 금화 자루를 찾을 수 있을까요? 풀이는 더보기를 누르세요. 더보기 이 문제는 옛날 미국드라마 "형사콜롬보"에도 나온 문제입니다. 그리고 일본만화 "소년탐정 김전일"에도 등장합니다. 각 자루를 순서대로 놓고 금화를 각각 1개, 2개, 3개, .... 10개씩 꺼내어 무게를 달았을 때, 만약 모두 진짜 금화라면 550g이지만 가짜 금화가 있기때문에 550g이 나오지 않습니다. 가짜가 진짜보다 1g이 가볍기 때문에 550g에서 부족한 g수 만큼의 순서의 자루가 가짜금화입니다. 예를 들어 첫번째 자루가 가.. 2020. 7. 28.
[즐거운 수학퀴즈] 모래시계로 시간재기 1. 7분짜리와 11분 짜리 모래시계로 15분을 재는 가장 간단한 방법이 무엇일까요? 마틴가드너(Martin Gardner)가 본인의 칼럼에 이문제를 냈더니 많은 사람들의 답이 일단 동시에 시작해서 7분을 보낸다음(아직 시작 안했습니다), 11분짜리에 남은 4분이 지나면 11분짜리 시계를 다시 뒤집는다는 것이었습니다. 하지만 시간을 재기위해 앞의 7분을 낭비할 필요는 없습니다.풀이는 더보기를 누르세요.더보기1. 먼저 두개의 모래시계를 동시에 시작합니다. (0분)2. 7분이 지나면 7분짜리를 뒤집습니다. (7분)3. 11분짜리가 끝나면 7분짜리는 4분이 지났으므로 다시 뒤집습니다. (11분)4. 7분짜리 남은 4분이 지납니다. (15분)5. 빙고! 2. 4분짜리 모래시계와 7분짜리 모래시계로 9분을 재는 .. 2020. 7. 26.
C언어 공부하기 - 순환문(2) do~while, break, continue, goto 1. do~while 문 지난시간에 for문과 while문 등의 순환문에 대해 공부했습니다. for나 while문은 순환(Loop)의 종료 조건을 앞에서 검사를 하는데 반해, do~while문은 뒤에서 검사합니다. 그러므로 최소 1번은 수행이 됩니다. do { statement } while (expression); 일단 do~while문에 진입하여 statement를 수행한 후 expression을 검사합니다. 문법에서 주의할 점은 마지막에 세미콜론(;)이 붙는다는 점을 잊지 말아야 합니다. 예제로 조금 더 알아 보겠습니다. 아래 함수는 itoa라는 함수인데 정수형숫자를 문자배열로 바꿔주는 역할을 합니다. int itoa (int n, char s[]) { int i, sign; if ((sign = .. 2020. 7. 25.