백준 17425번 약수의 합 [C언어] 문제 출처: https://www.acmicpc.net/problem/17425 Sol) #include #define MAX_INPUT 1000000 int main() { int T, N; long long sum_of_div[MAX_INPUT + 1] = {0}; for(int i = 1; i BOJ 2022.08.19
백준 17427번 약수의 합 2 [C언어] 문제 출처: https://www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net Sol) #include int main() { int N; long long sum = 0; scanf("%d", &N); for(int i = 1; i BOJ 2022.08.18
백준 1037번 약수 [C언어] 문제 출처: https://www.acmicpc.net/problem/1037 Sol) #include int main() { int a_divisor = 0; //약수를 입력받을 변수 long long max = 0, min = 1000001; //입력받은 약수중 최대값과 최소값을 각각 저장할 변수 int num_of_divisors; //약수의 개수를 저장할 변수 scanf("%d", &num_of_divisors); for(int i = 0; i max) //그중 최대값과 최소값을 찾는다. max = a_divisor; if(a_divisor < .. BOJ 2022.08.18
후위 증감연산자와 전위 증감연산자의 비밀 증감 연산자를 배울 때, 보통 후위(postfix) 증감연산자는 '할당 후', 즉 '연산자 우선 순위가 증감연산자에 비해 낮은 다른 연산 후' 연산을 하게 되고 전위(prefix) 증감연산자는 '할당 전', 즉 '연산자 우선 순위가 증감연산자에 비해 낮은 다른 연산 전' 연산을 하게 된다고 배운다(할당 연산자는 연산자 우선 순위가 증감 연산자에 비해 낮다). 이 포스트에서 우리는 도대체 왜 이런 현상이 발생하는지 알아보려고 한다. 잘 생각해보면 이는 굉장히 모순적인 문장이다. 예를 들면, 연산자 우선순위가 자신보다 낮은 '할당연산자'의 연산인 '할당' 이후에 후위 증감연산자가 연산을 수행하게 되는 것은 말이 안된다. 말 그대로, 후위 증감연산자가 연산자 우선순위가 더 높기 때문이다. 그렇다, 사실 이는.. Notes for C 2022.08.17
백준 1003번 피보나치 함수 [C언어] Sol) #include int main() { int count_zero[41] = {1, 0}; //0 ~ n번째 피보나치 수가 호출하는 0의 수를 저장할 배열. int count_one[41] = {0, 1}; //0 ~ n번째 피보나치 수가 호출하는 1의 수를 저장할 배열. int n = 0; //input. int tc = 0; //test case. scanf("%d", &tc); while(tc--) { scanf("%d", &n); for (int i = 2; i BOJ 2022.08.16
백준 2748번 피보나치 수 2 [C언어] Sol) #include int main() { unsigned long long fibo[91] = {0, 1}; int n = 0; for(int i = 2; i < sizeof(fibo) / sizeof(long long); i++){ fibo[i] = fibo[i - 1] + fibo[i - 2]; } scanf("%d", &n); printf("%llu\n", fibo[n]); return 0; } 피보나치 수 2 문제는 전에 풀었던 피보나치 수 문제와 기본 로직은 같다. 단지 n의 범위가 90까지 커졌다는 변화만 있을 뿐이다. 전에 n이 훨씬 더 커지면 포인터로 동적 할당을 해야겠다고 했는데, 지금 생각해보니 어차피 문제에서 n의 최대값이 정해져 있을텐데 굳이 느린 malloc함수를 써가면서까.. BOJ 2022.08.15
백준 2747번 피보나치 수 [C언어] Sol) #include int main() { int fibo[46] = {0, 1}; int n = 0; for(int i = 2; i < sizeof(fibo) / sizeof(int); i++){ fibo[i] = fibo[i - 1] + fibo[i - 2]; } scanf("%d", &n); printf("%d\n", fibo[n]); return 0; } 이 문제는 "의지충만#3 : 배열또는 포인터" 라는 백준 문제집에 있었다. 전에 재귀함수로 푸는 피보나치 수 문제를 푼 적이 있었기에 피보나치 수 문제는 무조건 재귀로 푸는 것이라는 잘못된 인식이 박혀있었다. 그래서 그리 어려운 문제는 아니었음에도 불구하고 처음 봤을 때 조금 당황했다. '피보나치 수 문제를 배열이나 포인터를 이용해서 어떻게.. BOJ 2022.08.15
백준 2863번 이게 분수? [C언어] Sol) #include int main() { double nums[5]; double max; int cnt = 0; for(int i = 0; i < 4; i++) scanf("%lf", &nums[i]); max = nums[0] / nums[2] + nums[1] / nums[3]; for(int k = 1; k < 4; k++){ //총 회전은 3번 하므로 nums[4] = nums[2]; nums[2] = nums[3]; nums[3] = nums[1]; nums[1] = nums[0]; nums[0] = nums[4]; if(max < nums[0] / nums[2] + nums[1] / nums[3]) { max = nums[0] / nums[2] + nums[1] / nums[3]; c.. BOJ 2022.08.13
scanf 함수 표준입력(stdin) 스트림으로부터 형식에 맞는 데이터를 읽어 온다. scanf(형식 문자열, 데이터 저장 포인터)를 인수로 갖는다. 형식에 맞는 데이터를 읽어 오는데 성공하면 읽어온 값의 개수를 integer형으로 반환한다. 만일 사용 가능한 입력이 있었으나, 해당 입력이 형식 문자열의 형식과 맞지 않았을 경우 0을 반환할 수 있다. 또한, 읽어보기도 전에 오류가 발생할 경우 -1을 반환할 수 있다. C언어는 운영체제와 상관없이, 파일의 끝에 도달했을 떄 언제나 특별한 값(EOF, -1)을 반환하도록 돼 있다. EOF는 End Of File의 약자로, 파일의 끝을 표현하기 위해 -1로 정의된 상수이다(Windows에서는 Ctrl + Z 후 Enter, Linux나 Unix 에서는 Ctrl + D를 통해.. Notes for C 2022.08.11
백준 1018번 체스판 다시 칠하기 [C언어] Sol) #include int main() { int row, col; int min = 64; char input_board[50][51]; //문자열로 입력받을 것이기 때문에 NULL문자 자리까지 51자리. scanf("%d %d", &row, &col); for(int j = 0; j < row; j++) { scanf("%s", input_board[j]); // \n, 즉 개행문자를 처리할 수 있는 가장 간단한 방법은 %s 서식지정자로 입력받는 것이다. } for(int k = 0; k < row - 7; k++) { //검사할 8 * 8 보드판을 세로 방향으로 이동시킬 for 문. 세로 길이가 8이 나와야 하기때문에 row - 8까지만 이동 for(int i = 0; i < col - 7; .. BOJ 2022.08.10