백준30 백준 1850번[c/c++] : 최대공약수 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 풀이 풀이에 앞서 프로그래밍에서 최대공약수를 구하는 함수를 알아보자(gcd 알고리즘) int gcd(long a, long b) { if (b == 0) return a; else return gcd(b, a % b); } 예시로 gcd(8,24)를 생각해보자. b가 0이 아니기 때문에 재귀함수 gcd(24,8)이 호출된다. gcd(24,8)도 b가 0이 아니기 때문에 재귀함.. 2022. 4. 30. 백준 2872번[c/c++] : 우리집엔 도서관이 있어 https://www.acmicpc.net/problem/2872 2872번: 우리집엔 도서관이 있어 상근이는 컴퓨터 공학의 일인자가 되기 위해 책을 매우 많이 구매했다. 하지만, 집에 책장이 없어서 책을 탑처럼 쌓아놓고 있다. 오늘은 오랜만에 상근이가 집에서 휴식을 취하는 날이다. 상근 www.acmicpc.net 풀이 첫째 줄에 책의 개수 N을 입력한다. 예시를 보면 제일 큰 숫자 4는 -> 3과 4로 정렬이 되어있다. 즉 2를 위로 옮기고 1을 옮기면 된다 (총 두번) 3, 2 ,4, 5, 1을 생각해보자. 3과 4와 5는 이미 3,4,5 순으로 정렬이 되어 있다. 그러므로 2를 맨 위로 옮기고 그 다음 1을 맨 위로 옮기면 된다. 총 두번을 옮기면 된다. 여기서 공식을 알 수 있다. 이미 정렬되어.. 2022. 4. 29. 백준 15903번[c++] : 카드 합체 놀이 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 풀이 첫 번째 줄에 카드의 수, 합체의 수를 입력받는다 두 번째 줄에 카드의 값을 나타내는 값들을 입력받는다. 값들을 vector에 넣는다. 최솟값을 구해야하기 때문에 가장 작은 것 두개를 더하면 된다. sort함수를 통해 정렬을 하면 배열의 0번과 1번에 가장 작은 두 값이 오게 된다. 두 값을 더한뒤 0번 배열과 1번 배열에 더한값을 덮어 씌운다. 배열의 .. 2022. 4. 28. 백준 11399번[c언어] : ATM https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이 첫째 줄에 사람 수 입력받는다. 배열크기가 1000인people[1001]선언하기 사람 수만큼 시간의 값을 입력받는다 가장 최솟값을 가지게 하려면 배열이 오름차순으로 정렬되어야한다. 배열을 정렬해아 하기 때문에 정렬기법을 사용한다. 정렬의 기법을 매우 여러개지만 그 중 하나인 삽입 정렬 알고리즘을 사용하였다. 배열을 정렬한 후 이중 반복문을 통해 값을 더해나간다. #include //삽입정렬 함수 void insertio.. 2022. 4. 27. 이전 1 2 3 4 5 ··· 8 다음