목록c언어 (11)
여행을 개발하다
안녕하세요! 오늘 포스팅 할 내용은 정렬 알고리즘의 하나인 '버블 정렬(Bubble Sort)'입니다. 데이터들은 여러 가지 방법으로 정렬되어 오름차순 혹은 내림차순 등으로 순서가 정해지는데요. 사실 정렬하는 방법에도 여러가지가 있다는 것을 알고 계셨나요? 실제로 컴퓨터가 내부에서 데이터를 정렬할 때, 어떤 정렬 방식을 쓰느냐에 따라서 시간의 효율성이 좌우됩니다. 물론 사람도 금방 할 수 있는 작은 양의 데이터라면 큰 차이는 없겠지만요. 그러나 방대한 양의 데이터를 다룰 때는, 그 효율성이 어마어마하게 달라지겠죠? 그럼 총 5가지로 구분하는 정렬 알고리즘, 그 중에서도 버블 정렬에 대해 알아보겠습니다. 1. 시간 효율성 먼저 시간 효율성에 대해서 알고 가겠습니다. 시간 효율성이란 '알고리즘을 실행하여 종..
안녕하세요! 오늘 포스팅할 내용은 2차원 배열의 응용예제, '마방진 만들기'입니다! 거북이 등판의 숫자... 다들 한 번씩은 들어보셨을텐데요. 마방진은 어떤 원리가 적용되는지를 간단하게 살펴보고, C++ 2차원 배열로 채워보도록 하겠습니다. 1. 마방진의 원리 마방진은 n * n의 개의 숫자를 n * n 행렬에 배열한 것인데, 가로, 세로, 대각선의 합이 모두 같다는 특징을 가지고 있습니다. n이 2가 아니면 마방진은 항상 존재하구요. 간단한 예로 5 * 5 마방진은 이렇게 생겼어요. 1부터 n * n까지 모두 채워져 있는데, 아직까진 배열이 어떻게 채워졌는지 감이 오지 않습니다. 하지만 여기에도 규칙이 있으니, 그것은 1이 반드시 첫 번째 행 중간에 와야한다는 점이에요. 그리고 숫자들을 오름차순으로 하..
안녕하세요! 오늘은 2차원 배열의 응용 예제로, 'ㄹ' 자 모양의 배열을 만들어보겠습니다. 제가 그 많고 많은 예제 중에 'ㄹ'자 배열을 선택했냐면요... 지난달 말에 치룬 정보처리기사 실기 시험에서 나왔기 때문이에요. 시험지에서 직접 봐서 그런지, 한 번쯤 직접 구현해보고 싶더라구요!! 마침 2차원 배열 이야기를 하고 있던 중이어서, 타이밍도 좋았습니다! 1. 'ㄹ'자 배열 'ㄹ'자 배열은 다음과 같은 배열을 말하는데요. 자세히 보시면, 숫자가 증가하는 방향이 'ㄹ'자 형태를 띕니다. 2. C++로 'ㄹ'자 배열 구현하기 그럼 C++로 'ㄹ' 자 배열을 구현해보도록 하되, 한 번은 2차원 배열의 정적 할당으로, 한 번은 동적 할당으로 해보겠습니다. 2-1. 정적 할당으로 구현하기 임의로, 5*5의 정적..
안녕하세요! 오늘은 지난 시간에 이어 '2차원 배열의 동적할당'에 대해 알아보겠습니다. 동적 할당이므로 역시 '포인터(pointer)'도 자연스럽게 등장합니다. 1. 2차원 동적 배열의 선언 1차원 배열을 동적으로 할당할 땐, 가로축, 즉 단 하나의 메모리의 시작 위치만 정해주면 되었었죠? 하지만 2차원 배열은 세로축, 배열 안에 있는 다른 배열도 신경써야 하는 번거로움이 생겨버렸어요. 그래서 포인터도 2개가 필요해졌네요. 하나는 큰 범위에 있는 배열의 시작 메모리 위치를 기억할 포인터 하나, 하나는 인수로 갖고 있는 배열들의 시작 메모리 위치를 기억할 포인터 하나. 이 때 등장하는 개념이 '이중 포인터'입니다. 이중 포인터는 '포인터의 포인터'라고 생각하시면 됩니다. 포인터 변수가 '변수가 저장된 메모..
안녕하세요! 지난 시간에 1차원 배열의 동적 할당에 대해 알아보았습니다. 그럼 오늘은 지난 시간에 포스팅했던 내용을 응용하여, 학생들의 점수 합계, 평균, 표준편차와 분산을 구하는 간단한 프로그램을 짜보도록 하겠습니다. 물론 학생들의 수가 정해져있다면 정적 할당으로 짜도 무관합니다 : ) 지난번과 동일하게 몇 명의 학생들의 점수를 입력 받을지를 사용자에게 물어보고, 필요한 만큼 배열의 크기를 할당하겠습니다. 합계를 구하기 위해 정수형 변수 sum을 선언하고, 0으로 초기화하겠습니다. 그리고 배열의 각 요소를 더하여 합계를 계산합니다. 그 다음에는 평균을 계산해야 하는데, 나눗셈을 하다보면 소수점까지 구해질 여지가 다분합니다. 그래서 평균을 저장할 변수 var, 분산을 저장할 변수 var, 표준편차를 구할..
안녕하세요! 오늘 포스팅 할 내용은 Array, 배열입니다. 배열이란, 말 그대로 여러 개의 원소의 묶음을 의미하는데요. 어떤 프로그래밍 언어든지 매우 중요하게 다루어지는 부분입니다. 그 이유는 배열을 사용해서, 동일한 타입의 변수들을 효율적으로 관리 및 사용할 수 있기 때문입니다. (참고로 C++에서의 배열은 Java, Python 등 기타 언어에서도 매우 유사하게 사용됩니다.) 그 중에서도 오늘은 1차원 배열, 그리고 1차원 배열을 정적할당하는 법에 대해 알아보겠습니다. 1. 배열(Array)이란? - 동일한 타입의 변수들을 한데 묶어 놓은 것. - 하나의 배열은 0개 이상의 원소들로 구성되어 있다. - 각각의 원소들은 각각 고유의 인덱스(index)를 가지며, 배열명과 인덱스로 접근 및 사용이 가능..
안녕하세요! 오늘 포스팅의 주제는 '피보나치 수열(Fibonacci Numbers)'! 지금까지 공부했던 제어문들과 함수를 사용하여, C++에서 피보나치 수열을 구현해보고자 합니다. 고등학교 2학년 수학 시간, 여러가지 종류의 수열을 처음 접했는데요. 기억을 되새겨 보시면 피보나치 수열은 다음과 같은 규칙을 가지고 있습니다. 1, 1, 2, 3, 5, 8, 13, 21 ..... n번째 항의 값은 n-1과 n-2의 값을 합한 값이 되어 수열을 이루게 됩니다. 즉, 3번째 항인 2는, 첫 번째 항인 1과 두 번째 항인 2가 더해진 값이 됩니다. 그리고 4번째 항인 3은, 두 번째 항인 1과 세 번째 항인 3이 더해진 값이 됩니다. 이를 공식화하면 다음과 같습니다. 그럼 위의 공식들을 이용하여 C++에 피보..
안녕하세요! 지난 포스팅에서 다뤘던 for문. 오늘은 더 나아가 다중 for문에 대해서 포스팅을 하고자 합니다. 다중 for문이란 하나의 for문 안에 1개 이상의 for문이 들어가 있는 형태를 말하는데요. 프로그램을 짤 때, 모든 알고리즘이 하나의 반복 루프만을 사용한다면 참 다행이겠지만, 안타깝게도(?) 안 그럴 경우가 더 많을꺼에요. 그럼 지금부터 다중 for문이란 무엇이고, 사용 예제는 어떤 것들이 있는지 하나하나 살펴보도록 하겠습니다. 1. 형식 for(초기식1 ; 조건식1; 증감식1) { for(초기식2 ; 조건식2; 증감식2) { 실행문장1; } 실행문장2; } - for문 안에 for문을 하나 이상 포함하는 경우를 다중 for문이라고 한다. - 안쪽 for문은 바깥쪽 for문에 완전히 포함..