참새(참인턴) 블로그(30)
-
[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 -
[C++] 백준 9012번 - 괄호
문제를 읽고 VPS는 (, ) 개수가 같고 괄호가 닫혀 있어야 된다고 생각해서 스택을 사용했다. 우선 '('이면 push, 스택이 비어있지 않고 ')'이면 pop을 했고 여기서 NO인 경우(VPS가 아닌 경우)를 두 가지 찾았다. ① ')'인데 스택이 비어있는 경우이다. 이 경우는 ')' 괄호 개수가 '('개수 보다 많은 경우 또는 ')(' 열린 괄호인 경우이다. ② 각 문자열에 대해 연산이 끝났을 때 스택이 비어있지 않는 경우다. 이 경우는 '(' 괄호 개수가 ')'개수 보다 많은 경우이다. ※NO에 해당하는 경우를 아래 코드에서 주석으로 표시했다. ①, ②인 경우는 count++; 했고, count가 0이면 YES, count가 0이 아니면 NO를 출력해서 VPS를 판단했다. #include #inc..
2020.07.10 -
[C++] 백준 17298번 - 오큰수
처음에는 스택, 벡터 라이브러리를 사용하지 않고 for문으로 하나씩 검사하는 알고리즘으로 코드를 작성했다. 위 코드로 채점하니까 시간 초과가 떠서 결국 구글링을 하게 됐다. 구글링 한 코드를 분석하니까 벡터는 입력한 수를 저장하고 스택은 i번째 원소의 오큰수를 찾기 위해 인덱스 i를 저장한다. 두 번째 for문은 원소 개수만큼 반복한다. while문 조건은 스택이 비어있지 않고 v[s.top()] 오큰수를 찾으면), v[i](오큰수)를 출력할 벡터에 대입하고 스택의 top(인덱스 i)을 pop한다. while문 조건을 만족하지 못하면 스택에 i값을 push한다.(스택에 인덱스 i 삽입) 참고: https://sihyungyou.github.io/baekjoon-17298/ 백준 17298번 : 오큰수 B..
2020.07.10