수학 205

[백준 1085] 직사각형에서 탈출 [C]

풀이 (x, y)가 경계선(x, 0), (0, y)과, 직선 x = w, y = h 중 어디까지의 거리가 최솟값인지 구하면 된다. 소스코드 #include #define MIN(a,b) (a < b ? a: b) int main(){ int x, y, w, h, min; scanf("%d %d %d %d", &x, &y, &w, &h); printf("%d", MIN(MIN(w - x, x), MIN(h - y, y))); } 출처 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net

[백준 1978] 소수 찾기 [C]

풀이 입력받은 수 num이 num/2 이하의 범위 중에 소수가 존재하는지 몇 줄 내로 간단하게 해결할 수 있지만, 에라토스테네스의 체를 이용해 효율적으로 풀이해봤다. 에라토스테네스의 체는 고대 그리스 수학자 에라토스테네스가 발견한 소수를 구하는 알고리즘이다. N까지의 수는, N의 제곱근보다 작은 정수들의 배수를 모두 지우고 남는 수가 소수라는 사실을 알 수 있다. 이번 문제에서 주어지는 최대의 자연수는 1000으로, 1000의 제곱근인 31.62xxx보다 작은 정수 31까지의 배수들을 제외하고 남은 수들이 소수임을 알 수 있다. 하지만, 문제에서 입력받는 수가 소수인지 확인하기 위해 탐색하는 과정이 효율적이지 못해 위에서 조작한 배열을 소수와 소수가 아닌 구간으로 정렬해주었다. int arr[MAX], ..

[백준 2609] 최대공약수와 최소공배수 [C]

풀이 유클리드 호제법은 최대공약수를 구하는 알고리즘이다. 두 수 N, M (N > M)을 입력받는다. N을 M으로 나누었을 때의 몫과 나머지가 N, M이 되며 이 과정을 나머지가 0이 될 때 까지 반복한다.\ 나머지가 0이 될때의 N(몫)이 최대공약수이다. 두 수 N, M의 곱은 최대공약수(GCD)와 최소공배수(LCM)의 곱과 같다. 소스코드 #include int euclidean_gcd(int n, int m){ return m ? euclidean_gcd(m, n%m) : n; } int main(){ int n, m; scanf("%d %d", &n, &m); int gcd = euclidean_gcd(n, m); printf("%d\n%d", gcd, n*m / gcd); } 출처 및 참고자료 ..

[백준 11720] 숫자의 합 [C]

풀이 문자열을 입력받고, 문자 '0'~'9'에 48을 뺀 아스키 코드 값이 숫자 0 ~ 9와 같다는 점을 이용해 해결하면 된다. 소스코드 #include int main(){ int N, sum = 0; char str[101]; scanf("%d %s", &N, str); for (int i = 0; i < N; i++) sum += str[i] - 48; printf("%d", sum); } 출처 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net