목록분류 전체보기 (103)
Vienna
오늘도 어디 해 보실까 1. 실습_ArithmaticOperators using System; namespace _4장_ArithmaticOperators_119page { class Program { static void Main(string[] args) { int a = 111 + 222; Console.WriteLine($"a: {a}"); int b = a - 100; Console.WriteLine($"b: {b}"); int c = b * 10; Console.WriteLine($"c: {c}"); double d = c / 6.3; Console.WriteLine($"d: {d}"); Console.WriteLine($"22/7={22 / 7}({22 % 7})"); } } } 2. 실습_..

Q11. Q10의 알고리즘은 삽입할 위치의 검색은 빠르지만 삽입을 위해 요소를 하나씩 뒤쪽으로 미는 작업 비용이 단순 삽입 정렬 알고리즘과 같습니다. 요소를 뒤쪽으로 미는 작업을 표준 라이브러리의 memmove 함수를 사용해서 구현하면 비용을 줄여 좀 더 빠른 속도를 얻을 수 있습니다. 이 아이디어를 바탕으로 이진 삽입 정렬 함수를 수정하세요. 우선 memmove부터 찾아봐야겠다. 설명 해석: source의 num만큼의? 값들을 복사해 destination으로 복사한다. 복사는 중간버퍼를 사용하는데, 이미 데이터가 있다면 덮어 씌워질 수 있다. source와 destication 포인터가 가리키는 요소의 타입과 이 기능은 관련이 없다. null 체크는 하지 않고 항상 num bytes 만큼 복사한다. 오..
Q10. 단순 삽입 정렬을 배열의 요소 개수가 많아지면 많아질수록 요소 삽입에 필요한 비교, 대입 비용이 무시할 수 없을 정도로 커집니다. 이때 배열에서 이미 정렬된 부분은 이진 검색을 사용할 수 있기 때문에 삽입할 위치를 더 빨리 찾을 수 있습니다. 이진 검색을 사용하여 프로그램을 수정하세요. 정답: idx = pl
Q9. 단순 삽입 정렬에서 배열의 첫 요소부터 데이터를 저장하지 않고 a[1]부터 데이터를 저장하면 a[0]을 보초로 하여 삽입을 마치는 조건을 줄일 수 있습니다. 이 아이디어를 적용한 단순 삽입 정렬 함수를 수정하세요. 내 답변: void insertion(int a[], int n) { int j; for (int i = 1; i tmp; j--) a[j] = a[j - 1]; if (j!=0) a[j] = tmp; } } 정답: int tmp=a[0]=a[i]; 대입을 한 줄로 깔끔하게 할 수 있단 걸 계속 잊는다. 기억하자. 그리고 그냥 if(j)라고 썼네. 더 짧게 코드를 쓸 수 있..

Q.8. 요소의 삽입 과정을 자세하게 출력할 수 있도록 단순 삽입 정렬 프로그램을 수정하세요. 오른쪽처럼 현재 선택한 요소 아래에 기호 +, 삽입하는 위치의 요소 아래에 기호 ^, 그 사이에 기호 -를 출력하세요. 삽입하지 않는(요소의 이동이 필요없는) 경우에는 선택한 요소 아래에 +만 출력하면 됩니다. 내 답변: void insertion(int a[], int n) { int j; for (int i = 1; i 0 && a[j - 1] > tmp; j--) { a[j] = a[j - 1..
Q7. 요소의 교환 과정을 자세하게 출력할 수 있도록 단순 선택 정렬 프로그램을 수정하세요. 오른쪽처럼 정렬하지 않은 부분의 첫 번째 요소 위에는 기호 *를, 정렬하지 않은 부분의 가장 작은 값의 요소 위에는 기호 +를 출력하세요. 내 답변: void insertion(int a[], int n) { for (int i = 0; i

오늘부터는 유니티 공부도 병행하기로 했다. 아직까지는 내가 이미 알고 있던 유니티 사용법과 기초적인 프로그래밍 문법에 대해서만 나왔다... 쉽다는 후기가 있긴 했지만 이렇게까지 기초가 나올 줄은 몰랐다. 하지만 앞으로 어려워지겠지. 계속 너무 쉬우면 다른 책을 구매하는 것도 고려해야겠다. Console 창에 띄운 결과는 신기했다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { // Start is called before the first frame update void Start() { for (int i = 0; i < 5; i++) Debug..
오늘도 화이팅 1. 실습_SignedUnsigedConversion using System; namespace _3장_SignedUnsigedConversion_74page { class Program { static void Main(string[] args) { int a = 500; Console.WriteLine(a); uint b = (uint)a; Console.WriteLine(b); int x = -30; Console.WriteLine(x); uint y = (uint)x; // under flow 발생 Console.WriteLine(y); } } } 2. 실습_FloatToIntegeral using System; namespace _3장_FloatToIntegeral_75page {..

오늘부터는 C#도 공부하기로 했다. 교재는 "이것이 C#이다"를 구매했다. 게임잡을 둘러보니 온코테는 C++로 보고 실무는 C#으로 진행되는 경우도 흔하게 볼 수 있었다. 그리고 아무래도 유니티를 쓰려면 C#을 쓸 줄 알아야하니 공부하기로 했다. 이전에도 C#으로 간단한 프로그램을 만든 적이 있었지만 본격적으로 공부하는 건 이번이 처음이다. 1. 실습_Hello World C#의 기초적인 부분은 대강 알고 있기는 하지만, 새 언어를 배울 때마다 Hello World 파일을 만들지 않으면 뭔가 빼먹은 기분이 들어서 패스하지 않고 따라해보았다. using System; using static System.Console; namespace Hello { class Program { static void Mai..
Q6. 다음의 배열을 정렬한다고 가정하겠습니다. {9,1,3,4,5,6,7,8} 이 배열은 두 번째 요소부터는 정렬은 되어 있지만 버전 3의 버블 정렬 알고리즘을 사용해도 빠른 시간 안에 정렬 작업을 마칠 수는 없습니다. 왜냐하면 맨 앞에 있는 요의 값(9)은 1회의 패스를 거쳐도 한 칸만 뒤로 옮겨지기 때문입니다. 그래서 홀수 번째의 패스는 가장 작은 요소를 맨 앞으로 옮기고 짝수 번째 패스는 가장 큰 요소를 맨 뒤로 옮기는 방식을 사용하면 (패스의 스캔 방향을 교대로 바꾸면) 이런 정렬을 더 적은 횟수로 비교를 수행할 수 있습니다. 버전 3의 프로그램을 개선하여 양방향 버블 정렬을 수행하는 프로글매을 작성하세요. 내 답변: 우선 while문에서 for 문으로 변경했다. 진행되고 있는 패스의 숫자를 하..