C++ 16

구조체가 담긴 배열의 포인터

구조체로 학생의 학번, 이름, 생년월일(정수6개)를 저장하는 구조체를 생성한 후, 구조체를 배열로 만들고, 그 구조체 배열의 주소를 저장하는 포인터 변수를 통해 구조체 배열에 접근하여 원하는 학생 수 만큼 정보를 입력받고 출력하는 코드이 문제는 복잡해보이지만, 해결 방법이 어렵지 않다.기본 라이브러리를 불러온다.#include 이제 struct를 생성한다. struct에는 학번과, 이름, 생년월을을 저장해야 한다.struct student{ int student_num, birthday; char name[1000];}이제 scanf로 학생 수를 입력 받고, VLA문법으로 배열과 포인터를 생성한다.int n;scanf("%d", &n);struct student info[n];struct st..

기타 2025.04.15

재귀함수, 포인터

재귀 함수는 함수 내부에서 자기 자신을 재귀적으로 호출하는 함수이다. 예)void hello(int n){ if (0 이 함수에서는 n이 0이 될때 까지 재귀적으로 hello를 호출한다.재귀 함수의 대표적인 예에는 팩토리얼과 피보나치 수열이 있다.https://swchung09.tistory.com/38 27433번, 팩토리얼 2https://www.acmicpc.net/problem/27433이 문제는 정수 N을 줄때, N 팩토리얼을 출력하는 문제이다.팩토리얼은 1부터 N까지의 곱을 의미한다. 따라서 5 팩토리얼이면, 5*4*3*2*1=120이다.이 코드를 짜기 전, C에서blog.aiswstudio.comhttps://swchung09.tistory.com/39 10870번, 피보나치 수 5ht..

C, C++ 2025.04.14

25501번, 재귀의 귀재

https://www.acmicpc.net/problem/25501이 문제는 isPalindrome함수를 활용해서 함수의 반환 값과 recursion 함수의 호출 횟수를 출력하는 문제이다.우선 이 문제에서는 문자열을 사용하므로, stdio.h와 string.h를 불러온다.#include #include 이 문제를 쉽게 풀기 위해서 run_time이라는 전역 변수를 생성한다.int run_time;그 다음 이 문제에서 기본 적으로 준 recursion함수와 isPalindrome함수를 정의한다.int recursion(const char *s, int l, int r){ if(l >= r) return 1; else if(s[l] != s[r]) return 0; else return re..

10870번, 피보나치 수 5

https://www.acmicpc.net/problem/10870이 문제는 n을 주면, n번째 피보나치 수를 구하는 문제이다.우선 이전에 풀었던 문제인 팩토리얼 2를 응용해서 풀거기 때문에, unsigned long int는 그대로 사용하겠다.우선 기본 라이브러리를 불러온다.#include 재귀 함수를 이용해서 풀거기 때문에, fibonaci함수를 생성한다. (a와 b는 이전에 있던 숫자들이다.)(만약 C++이라면, 첫 a와 b를 기본 값으로 설정할 수 있다. a = 0, b = 0)unsigned long int fibonaci(int n, int a, int b);함수 내에서는 n이 0이면 0을 리턴하고, n이 3보다 작으면 a+b를 리턴하고, 전부 아니면 fibonaci(n-1, b, a+b)를 ..

27433번, 팩토리얼 2

https://www.acmicpc.net/problem/27433이 문제는 정수 N을 줄때, N 팩토리얼을 출력하는 문제이다.팩토리얼은 1부터 N까지의 곱을 의미한다. 따라서 5 팩토리얼이면, 5*4*3*2*1=120이다.이 코드를 짜기 전, C에서는 숫자의 범위가 파이썬처럼 무한하지 않기 때문에, 리턴 타입을 unsigned long int로 설정하였다.우선 기본 라이브러리를 불러온다.#include 그 다음 난 재귀함수로 문제를 풀거기 때문에, factorial함수를 생성한다. (unsigned long int는 부호가 없는 long int이기 때문에, 부호 비트가 없어서 더욱 큰 숫자의 범위를 표현할 수 있다.)unsigned long int factorial(int n);함수 내에서는 1보다 n..

배열, 변수(전역, 지역), 함수

배열은 다음과 같은 형태로 선언 된다.int arr[12] = {0,};여기서 int는 배열에 있는 값의 타입이고, 12는 배열의 길이이다. 그리고 arr은 배열의 이름이다.뒤에 있는 {0, }는 배열을 0으로 채우라는 의미이다.(또는 {0, 1, 2, 3}처럼 지정할 수도 있다.)지역 변수는 main안 에서 사용하는 변수처럼 어떤 중괄호 안에서 선언된 변수이다. 이는 변수가 선언된 중괄호 내에서는 호출할 수 있지만, 중괄호가 닫히면 호출할 수 없다.int main(){ int test = 0; //여기까지는 test를 호출할 수 있음}//여기 부터는 test를 호출할 수 없음반대로 전역 변수는 다른 함수에서도 호출할 수 있으며, main함수 밖 #include를 사용하는 부분 쪽에서 주로 선언 된..

C, C++ 2025.04.08

2차원 배열 이동 문제

2차원 배열로 15x15 짜리 판을 하나 만들고, 0으로 전부 초기화 한 후, 정 가운데 부분만 1로 둡니다.(체스에서 말을 둔다고 생각)그리고 숫자를 0이 입력될 때 까지 입력받고, 1을 입력할시 오른쪽으로, 2를 입력할시 아래로, 3을 입력할 시 왼쪽으로, 4를 입력할 시 위쪽으로 한칸씩 이동하고, 이동 할 때마다 이동한 판을 출력하는 코드를 작성하세요. (범위 밖으로 나가는건 처리하지 않아도 됩니다)조건) 이동하는 코드, 출력하는 코드는 모두 함수로 작성합니다.이 문제에서는 전역 변수로 array를 선언하면 편하기 때문에, {{0, }, {0, } (생략)}형식으로 초기화 했다.int arr[15][15] = {{0,}, {0,}, {0,}, {0,}, {0,}, {0,}, {0,}, {0,}..

기타 2025.04.08

10871번, X보다 작은 수

https://www.acmicpc.net/problem/10871이 문제는 n개로 이루어진 수열 a와 정수 x를 주고, a에서 x보다 작은 수를 전부 출력하는 문제이다.기본 입출력 라이브러리인 stdio.h를 불러온다.#include 배열과, n, x를 생성하고int arr[10000];int n, x;scanf로 n과 x를 입력받는다.scanf("%d %d", &n, &x);for 문으로 배열을 입력받는다.for (int i = 0; i 그 후, x보다 작은 것들을 for 문으로 출력한다.for (int i = 0; i 전체 코드#include int main(){ int arr[10000]; int n, x; scanf("%d %d", &n, &x); for (int i = 0..

10807번, 개수 세기

https://www.acmicpc.net/problem/10807이 문제는 N개의 정수가 주어지면, 정수 v가 몇 개인지 구하는 프로그램이다.입출력 라이브러리인 stdio.h를 불러온다.#include 배열을 생성하고, n과 v, num를 생성한다.int arr[100];int n, v, num = 0;scanf로 n을 입력받고scanf("%d", &n);for 문으로 array를 입력받는다.for (int i = 0; i 이후 v를 입력받고scanf("%d", &v);for 문으로 배열에서 v와 일치하는 값의 수를 구한다.for (int i = 0; i 최종 코드#include int main(){ int arr[100]; int n, v, num=0; scanf("%d", &n); ..

1546번, 평균

https://www.acmicpc.net/problem/1546이 문제는 입력받은 점수중 최댓값은 산출하고, 다른 점수를 원점수/최댓값*100으로 변환한 후 평균을 구하는 문제이다. 이른 통해 최고점이 70이고 다른 한 과목이 50점이면, 그 과목은 71.43점이 된다.우선 기본 라이브러리를 불러온다.#include 그 다음 과목의 수를 입력받는다.int n;scanf("%d", &n);이제 for문에서 과목을 배열 형태로 입력 받고, 삼항 연산자로 최댓값을 산출한다.int arr[100];int m = -1;for (int i = 0; i arr[i])? m : arr[i];}이제 for문으로 원점수/최댓값*100으로 변환하여 평균을 구한다. double s = 0;for (int i = 0; i ..