Algorithm with C
-
Kaprika수 구하기(4자리 수에 대해서만)Algorithm with C/ETC 2020. 10. 29. 19:41
문제 Kaprika 수란? 예를 들어 네 자리 숫자 2025의 가운데를 갈라보면 20과 25의 두개의 숫자가 생긴다. 이 두개의 숫자를 더하면 45이고, 45를 제곱하면 2025가 되어 원상태로 되돌아간다. 이러한 성질을 갖는 수를 Kaprika수 라고 한다. 또 81은 가운데를 잘라보면 8 과 1로 갈라지고, 더하면 9가 되고 다시 제곱하면 81로 돌아간다. 그러므로 81은 두 자리 숫자의 Kaprika수가 되는 것이다. 네 자리 kaprika 수를 구하는 프로그램을 만들자. 구현방법 이 문제에서 첫 번째로 필요한 기능은 해당하는 수가 네 자리 수인지를 판단할 수 있어야 한다. 이 기능을 담당할 함수의 이름을 GetNumberDigit 라고 하자. 매개변수는 현재의 수이다. GetNumberDigit함..
-
요술 사각형Algorithm with C/ETC 2020. 10. 27. 19:15
문제 N X N 정방 행렬에서 행의 합, 열의 합, 대각선의 합이 모두 같은 값을 갖는 프로그램을 작성하라. 입력 설계 정방 행렬의 크기 N을 받아들인다. 출력 설계 N = 3 N = 5 처리 조건 입력 자료 N은 반드시 홀수이며, 짝수일 경우는 에러 문구를 출력시킨다. 문제 힌트 Case1. 첫째 행의 중앙에 1을 넣는다. Case2. 현재의 위치(x,y)에서 배열의 대각선을 살펴본 다음, 그곳에 이미 다른 수가 있으면 현재의 위치 아래 칸에 수를 넣는다. Case3. 만일 정방 행렬의 크기를 벗어 나게되면, 정방 행렬이 연결된 것으로 생각해서 그 곳에 넣는다. n = 3 일 경우, 변수 테이블은 아래와 같다. 구현 소스 파일 프로그램 실행결과
-
배열에 중복 없이 랜덤으로 숫자 저장하기Algorithm with C/ETC 2020. 10. 20. 08:51
문제에 대해서 생각을 해보자. 처음에 배열에 아무 것도 저장이 되어 있지 않다면 해당하는 수를 바로 배열의 [0]번째 인덱스 요소에 저장 한다. 문제는 바로 [1]번째 인덱스에 저장을 할 때이다. 우선 임시 변수에 랜덤 수를 저장을 하고 있다가, [0]번째 요소와 비교를 해본다. 비교해서 값이 같으면 중복된 수 이므로 저장을 하면 안되며, 반대인 경우에는 바로 [1]번째 인덱스에 값을 저장한다. 그리고, [1]번째 인덱스까지 데이터가 저장이 된 후에는 이 임시변수와 0번, 1번 인덱스에 저장된 데이터들과 모두 비교를 통해 중복의 여부를 확인해야 한다. 즉, 중첩 반복문을 써야한다는 사실을 알 수 있다. 프로그램 실행결과 소스 파일
-
비트 연산자 문제Algorithm with C/ETC 2020. 10. 17. 08:52
문제 비트 이동 연산을 이용하여 문자 4개를 받아서 하나의 unsigned int형의 변수 안에 저장하는 프로그램을 작성하라. 첫 번째 문자는 unsigned int형 변수의 비트 0 부터 7 까지에 저장이 되고, 두 번째 문자는 비트 8부터 15 까지. 세 번째 문자는 비트 16에서 비트 23까지 네 번째 문자는 비트 24 부터 비트 31까지에 저장된다. 결과로 생성되는 정수값은 16진수로 출력하도록 한다. 비트 이동 연산과 비트 OR연산을 사용하라. 입력 첫 번째 문자:a 두 번째 문자:b 세 번째 무자:c 네 번째 문자:d 출력 결과값: 64636261 구현 프로그램 실행결과 소스 코드 더보기 #include #defineMAX4//문자 배열의 길이 #defineBITS_PER_BYTE8//1바이트..
-
세 점을 입력받아 삼각형의 성립 조건 구하기Algorithm with C/Math 2020. 10. 14. 08:46
문제 삼각형의 세 점의 좌표를 입력 받는다. 삼각형이 만들어질 수 있는지 없는지를 판단한다. 문제의 힌트 삼각형은 3개의 점으로 이루어져있다. 그리고 점이 3개이기 때문에 각 점과 점을 이을 수 있다. 즉, 3개의 직선이 만들어진다. 그런데 3개의 직선은 필요가 없다. 그 이유는 삼각형의 세 점을 A,B,C라 하고 점A를 기준점이라 생각해보자. 선분 AB와 AC이 이렇게 두 직선만 가지고 충분히 세 점이 삼각형을 이루는지 알아낼 수 있다. 두 선분이 만약 일치한다면 삼각형이 성립이 되지 않는다. 그리고, 벡터의 외적을 통해서도 프로그래밍 할 수 있다. 구현 여기서, 점을 표현하기 위해서 다음과 같은 구조체를 필요로 하자. 그리고, 직선에 대한 정보를 담을 구조체가 필요로 한다. 직선에서 중요한 정보는 기..
-
API를 활용한 파티고라스의 정리를 이용한 거리 구하기Algorithm with C/Math 2020. 10. 10. 12:30
[그림출처 : 네이버지식백과] 게임에서, 플레이어와 에너미와의 거리를 구하기 위해서, 위의 피타고라스 정리를 이용해서 거리를 구할 수 있다. 위의 내용을 가지고 API로 구현해보자. 먼저 변수부터 보자. 변수들은 모두 전역 변수이다. x,y가 플레이어의 좌표이며, x_2와 y_2는 에너미의 좌표이다. 우리가 구할 것은 플레이어와 에너미의 거리이다. 플레이어와 에너미의 거리를 담는 변수는 Distance이다. sqrtf함수는 루트함수이다. 점을 딱히 표현할 방법이 없어서, 원으로 표기를 한다. (x,y)는 원의 좌측상단점이며, (x+diameter, y+diameter) 는 원의 우측하단점이 된다. 아래의 함수는 각 방향 키의 입력에 따라 좌표값을 업데이트 한다. 아래에서 아래 방향키가 눌리면 y값이 작아..
-
행렬의 응용 Scale & RotationAlgorithm with C/Math 2020. 10. 7. 19:20
아래의 내용의 연장선이다. 아래의 내용을 먼저 보고 오는 것도 좋은 선택이다. 아래에서 구현한 파일들을 가지고 구현한다. designatedroom87.tistory.com/133?category=887656 행렬의 기본 연산과 행렬식,역행렬, 단위행렬 행렬은 과연 어디에 적용되는가를 알고 싶을 것이다. Unity에서 Transform이라는 Component가 있는데, 이 Transform에서는 전부 행렬로 처리를 한다. Transform에는 Position, Rotation, Scale이 있는데, 이 곳에.. designatedroom87.tistory.com 그림으로 Scale 개념 익히기. 기존의 직사각형 A를 우리가 2배 늘리고 싶다고 가정하자. 그러면, 직사각형 4개의 점의 좌표에 각 각 2를 ..
-
행렬의 기본 연산과 행렬식,역행렬, 단위행렬Algorithm with C/Math 2020. 10. 4. 20:53
행렬은 과연 어디에 적용되는가를 알고 싶을 것이다. Unity에서 Transform이라는 Component가 있는데, 이 Transform에서는 전부 행렬로 처리를 한다. Transform에는 Position, Rotation, Scale이 있는데, 이 곳에서 모두 행렬을 이용해 Object들의 좌표를 움직이게 한다든지, 회전을 시키고, 크기를 늘렸다 줄였다를 할 수 있다. 행렬을 아래와 같이 구조체로 정의하도록 하자. 행렬의 덧셈, 뺄셈, 곱셈 연산 위의 2X2행렬 곱셈의 일반화를 해보자. 행렬 곱셈의 주의 해야할 사항. 행렬식 단위 행렬(2by2 행렬임을 가정.) 역행렬 좀 더 엄밀히 수학적으로 말하면, 주어진 행렬의 역행렬이 존재하면 행렬의 행렬식은 0이 되지 않고 이와는 반대로 행렬의 행렬식이 0..