백준(8)
-
[C] 백준 2869번 - 달팽이는 올라가고 싶다
문제를 읽고, "반복문으로 V(높이)가 될 때까지 반복하면 되겠구나"라고 생각해서 아래의 코드를 작성했고, 결과는 시간 초과가 나왔다. 알고 보니 수학 문제였고, "예시를 통해 공식을 찾는 것이구나"하고 깨달았다. #include int main() { int height = 0; int day = 0; int A, B, V; scanf_s("%d %d %d", &A, &B, &V); while ((height += A) != V) { height -= B; day++; } printf("%d", day+1); } 예시 ① A=2, B=1, V=5 → X=4 1) 0+2-1=1 2) 1+2-1=2 3) 2+2-1=3 4) 3+2 ② A=3, B=1, V=5 → X=2 1) 0+3-1=2 2) 2+3 두 ..
2020.09.25 -
[C] 백준 2884번 - 알람 시계
아래의 경우로 나눠서 생각했다. i) M-45>=0 - 입력한 M(분)이 45보다 크거나 같은 경우는 H(시)는 그대로 출력, M(분)은 M-45로 출력 ex) 10 50 → 10 5, 10 45 → 10 0 0 55 → 0 10, 0 45 → 0 0 ii) M-45= 0) printf("%d %d\n", H, M - 45); else { if (H == 0) H = 24; printf("%d %d\n", H - 1, (60 + M) - 45); } } 잘못된 점이 있으면 아래 댓글로 많이 남겨주세요! 감사합니다.
2020.07.17 -
[C] 백준 10872번 - 팩토리얼
아래는 팩토리얼을 계산하는 코드로 재귀 함수를 이용했다. #include int factorial(int n); int main() { int n; scanf_s("%d", &n); printf("%d", factorial(n)); } int factorial(int n) { static int result = 1; if (n > 0) { result *= n; factorial(n - 1); return result; } else { return result; } } 잘못된 점이 있으면 아래 댓글로 많이 남겨주세요! 감사합니다.
2020.07.16 -
[C] 백준 2750번 - 수 정렬하기
시간 복잡도가 O(n^2)인 정렬 알고리즘은 교환 정렬, 선택 정렬, 삽입 정렬, 버블 정렬 등이 있지만, 버블 정렬을 공부해보려고 이 알고리즘을 사용했다. 버블 정렬은 인접한 2개의 레코드를 비교하여 순서대로 되어 있지 않으면 서로 교환하는 알고리즘이다. 임의의 수가 여러 개 있고 오름차순으로 정렬할 때, 첫 번째 교환이 끝나면 마지막에는 가장 큰 수가 위치할 것이다. 두 번째 교환이 끝나면 두 번째로 큰 수가 마지막에서 두 번째에 위치할 것이다. 예시를 보며 알고리즘을 이해해보자. ex) size=5, num[5]={5, 2, 4, 1, 3}이 있다. 이중 for문에서 첫 번째 for문 i는 각 단계에서 최대 교환 횟수와 인덱스 i미만까지 접근이 가능한 것을 의미한다. 이게 무슨 말이냐면 1단계 → ..
2020.07.13 -
[C] 백준 2839번 - 설탕 배달
경우의 수를 너무 세세하게 생각했더니.. 알고리즘이 산으로 가버려서 구글링 했다!! 알고리즘을 분석하면, ① 5의 배수면 → 5로 나눈 몫을 바로 출력 ② 5의 배수가 아니면 → 3을 빼고 count++; 했을 때, 2-1) 5의 배수가 되면 다음 반복에서 if문 조건(5의 배수)을 만족시키므로 5로 나눈 몫을 더해서 출력 ex) 18, 21, 24 2-2) 3의 배수가 되면 n값이 0이 되어 다음 반복에서 if문 조건(0을 5로 나누면 0이 됨)을 만족시키므로 5로 나눈 몫을 더해서 출력 ex) 3, 6, 9, 12 2-3) 음수가 되면 n(입력한 수)을 만들 수 없으므로 -1 출력 ex) 4, 7 #include int main() { int n; int count = 0; scanf_s("%d", ..
2020.07.12 -
[C] 백준 1712번 - 손익분기점
(잡담) 새벽 1시 30분에 갑자기 정전되고.. 30분 동안 멍 때리다가 복구돼서 수학 문제나 풀어볼까 하고 풀어봤당..역시 수학은 짜릿해! A - 고정 비용, B - 가변 비용, C - 노트북 가격, X - 판매 개수이다. 만약 A=1000, B=70일 때, 1대 생산하면 A+B=1070이고 10대 생산하면 A+BX=17000이 된다. 그럼 손익분기점이 되려면 CX > A+BX이고, X로 식을 정리하면 X > A/(C-B)가 된다. 근데 X는 A/(C-B)보다 큰 정수이므로 바로 X를 구하게 되면 식은 X = A/(C-B)+1이 된다. 이 계산식을 이용하면 바로 X(손익분기점이 되는 판매량)을 구할 수 있다. #include int main() { double A, B, C; scanf_s("%lf %..
2020.07.12