피보나치 문제 쉽게 보고 들어갔다가 C로 하는법 잊어버렸어서
해결하는데 오래걸렸다.. 재귀만 너무 생각해서 문제의 본질을 잊었다!!
피보나치 문제 중에 가장 쉬운 문제인거 같다..
피보나치의 핵심은 f[n] = f[n-1] + f[n-2] 라는것을 명심하자!
0,1,1,2,3,5,8,13,21 ...
이 문제에서는 숫자가 최대 45까지만 들어오기 때문에 int범위를 굳이 생각 안해도 됨!
근데 만약 n이 너무 크면 int가 아닌 string으로 바꿔서 해결해야한다!! -> 복잡해짐!
#include<stdio.h>
int num[46];
int fibo(int n) {
num[0] = 0;
num[1] = 1;
for(int i=2; i<=n; i++) { num[i] = num[i-1] + num[i-2]; }
}
int main() {
int n;
scanf("%d",&n);
int result = fibo(n);
printf("%d",result);
return 0;
}
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.
이름과 나이가 들어왔을 때, 나이를 비교해서 이름과 나이를 같이 출력해야한다!
이때 이름과 나이를 같이 출력하기 위해서는 구조체가 필수!
풀이 순서
1. age와 name이 합쳐진 구조체를 만든다
2. 사람이 총 100000명 들어 올 수 있으므로 구조체 배열도 선언하기!
3. 사람들을 순서대로 받아서 배열에 넣기 때문에 순서에 대해 크게 걱정 안해도된다!
4. 나이가 1- 200 까지이니까 나이가 어리고 순서가 빠르다면 바로 출력해주기!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct p{
int age;
char name[200];
}w;
w members[100001];
int main(void) {
int n;
scanf("%d", &n);
for(int i=0; i<n; i++) {
scanf("%d %s", &members[i].age, members[i].name);
}
for(int i=1; i<=200; i++) {
for(int j=0; j<n; j++) {
if(i == members[j].age) {
printf("%d %s\n", members[j].age, members[j].name);
}
}
}
return 0;
}
재귀를 요새 너무 공부 안했더니 조금 헷갈려지는거 같다!
재귀 관련 부분들 오늘 다시 한번 보면서 생각을 다 잡자!
그리고 구조체 부분도 연습하기! -> 문제 풀때 바로 생각날 수 있게 끔!