전체 글

항공대 알고리즘 동아리 Koala 🥰
문제셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...n을 d(n)의 생성자라고 한다..
문제 https://www.acmicpc.net/problem/1764 Algorithm1. n과 m을 split을 이용해 한 줄로 입력받는다.2. 듣지 못한 사람을 a, 보지 못한 사람을 b로 설정하고 각각 n과 m만큼 입력받는다.3. a와 b에 모두 들어가 있는 원소를 c에 저장하고 sort로 정렬한다.4. c의 길이를 출력한 후, 다음 줄에 c를 출력한다.   Coden,m = map(int,input().split())a,b = set(),set()for i in range(n): s = input() a.add(s)for i in range(m): s = input() b.add(s)c = sorted(list(a&b))print(len(c))for i in range(le..
문제정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.1+1+1+11+1+21+2+12+1+12+21+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.출력각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.## n을 만들 수 있는 경우의 수 = n-1을 만들 수 있는 경우의 수 + n-2를 만들 수 있는 경우의 수 + n-3을 만들 수 있는 경우의 수## 이 때, 인덱스가 1, 2, 3인 경우에는 각각..
문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.예시10의 경우에 10 → 9 → 3 → 1 로 3번 만에 만들 수 있다.n = int(input())s = [9999999] * (n + 1)s[n] = 0# s배열의 각 인덱스의 값을 가능한 최소값으로 업데이트 해주면 된다.def update(i): if i % 3 == 0: ..
https://www.acmicpc.net/problem/19532알고리즘 분류수학브루트포스 알고리즘a, b, c, d, e, f = map(int, input().split())ans_flag = 0for i in range(-999, 1000): for j in range(-999, 1000): if a*i + b*j == c and d*i + e*j == f: ans_flag = 1 break if ans_flag: break print(i,j)문제풀이방정식을 만족하는 유일한 (x, y)의 범위가 -999 이상 999 이하의 정수로 한정되었으므로굳이 수학적으로 구하지 않고 제한 시간 ..
문제 풀이입력값 N이 제한 시간 2초에 비해 짧으므로 브루트포스로 전수조사한다.한 자리, 두 자리 수는 모두 한수이다. 인덱스 범위 초과를 조심하며 코드를 작성한다.코드n = int(input()) cnt = 0 for i in range(1, n+1):     a = str(i)     flag = True     for j in range(len(a) - 2):         if int(a[j]) - int(a[j + 1]) != int(a[j + 1]) - int(a[j + 2]):             flag = False                  if flag:         cnt += 1          print(cnt)
문제https://www.acmicpc.net/problem/14579풀이* 예제 입력을 봤을 때 공백으로 구별되는 두 수를 입력받음1. a에서 b까지, 1부터 그 숫자까지의 합을 구하고2. 합들을 모두 곱한 뒤3. 14579로 나눈 나머지값을 출력해야 함 코드 및 설명
N과 M (6)문제N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.N개의 자연수 중에서 M개를 고른 수열고른 수열은 오름차순이어야 한다.입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.예제 입력 1 복사3 14 5 2예제 출력 1 복사245예제 입력 2 복사4 29 8 7 1예제 출력 2 복사1 7..
https://www.acmicpc.net/problem/2752풀이1. 세 수 중 앞의 두 수를 조건문을 이용하여 대소를 비교2. 앞의 두 수중 더 작은 수와 나머지 수의 대소를 비교3. 1, 2번의 순서에서 완료되지 않은 대소 비교의 조건 케이스를 비교해서 모든 경우를 분류코드
문제 https://www.acmicpc.net/problem/2839 Algorithm1. 정수 N을 입력을 받아서 N킬로그램을 만들 수 있을 때와 없을 때로 구분한다.2. 5킬로그램의 설탕 봉지를 가능한 많이 사용하는 것이 최소 개수가 될 수 있다.3. N의 경우는 5킬로그램의 설탕 봉지만 쓰는 경우와 3킬로그램의 설탕 봉지만 쓰는 경우 2가지 다 쓰는 경우 불가능한 경우 총 4가지가 존재한다.4. while문을 통해서 불가능한 경우와 나머지 3가지 경우를 분리하고, 5의 배수일 때를 확인하는 조건문을 통해서 최소 개수를 얻을 수 있다.5. 5의 배수가 아니라면 3킬로그램의 설탕 봉지를 사용해서 3을 뺀후 다시 반복문을 통해서 최소 개수를 얻을 수 있다.  Code#includeusing namesp..
https://www.acmicpc.net/problem/15663문제N개의 자연수가 주어지고, M개를 고른 수열을 출력한다.조건1. 중복되는 수열을 출력하면 안된다.조건2. 사전 순으로 증가하는 순서로 출력한다.풀이사전 순으로 출력해야 했기 때문에 입력받은 N들을 sort() 로 정렬했다.2가지를 고려해야 했다.1. 똑같은 조합이 나오면 출력하면 안된다.3 14 4 2위의 입력의 경우, 결과가244 # 중복이여서 안됨 위와 같이 똑같은 수열 4가 중복해서 출력되면 안된다.2. 같은 수가 여러번 나올 수는 있다.아래와 같은 입력의 경우4 29 7 9 1아래와 같이 숫자가 중복 될수는 있다. (9 9)1 71 97 17 99 19 79 9 # 이건 가능 기본적으로 백트래킹을 이용해 풀었다.1의 경우를 해결..
문제&링크https://www.acmicpc.net/problem/1895 풀이1. 전체 이미지를 확인해야 하기에 완전 탐색을 사용한다.2. 필터의 크기가 3 x 3이기에 필터의 사각형의 왼쪽 위를 기준으로 두고 반복문을 사용한다. 즉 R과 C의 크기 -2까지 반복문 사용한다.3. 해당 필터 내에 있는 모든 값을 벡터 V에 삽입한다.4. 필터에 대한 반복문이 끝날 때 벡터 V를 오름차순으로 sort하고, 중간 값인 네 번째 인덱스를 벡터 ans에 삽입한다.5. 이미지의 모든 부분에 대해 필터를 씌우고 난 후 모아진 벡터 ans에 대해서 입력한 값 T보다 큰지 작은지 판단 후 정답인 cnt를 구한다. 코드#include #include #include using namespace std;int img[41..
KauKoala
Koala