전체 글

항공대 알고리즘 동아리 Koala 🥰
문제https://www.acmicpc.net/problem/15813풀이* 첫 번째 줄에는 이름의 길이가, 두 번째 줄에는 이름이 주어진다.* 각 알파벳에 할당된 점수를 합쳐 출력해야 한다.1. 이름의 길이와 이름을 각 변수에 저장한다.2. 이름의 길이만큼 점수를 더하는 작업을 반복해야 한다.3. 알파벳의 점수는 A = 1, B = 2, ... , Z = 26점이므로, 알파벳의 아스키 코드 - 64로 간단히 구할 수 있다.코드 및 설명
문제풀이같은 수를 고를 수 있으므로 M왼쪽에서부터 두 수를 고르고 차이가 M보다 작으면 오른쪽을 한 칸 증가, M보다 크면 왼쪽을 한 칸씩 증가시키면서 더 작은 값이면 갱신을 반복한다.코드
문제KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 예를 들어, 주어진 용액들의 특성값이 [-99, -2, -1, 4, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액의 ..
https://www.acmicpc.net/problem/1806알고리즘 분류 누적 합 투 포인터N, S = map(int, input().split()) li = list(map(int, input().split())) left, right = 0, 0 _sum = li[0] min_Dis = float('inf') while 1: if _sum >= S: # 문제 조건에 맞는 경우 / S보다 합이 크므로 left이동, 범위 축소 # 최소 거리 갱신 if min_Dis > (right - left + 1): min_Dis = right - left + 1 # left가 더이상 이동할 수 없을 때 right 이동 if left == right: if right == N-1: break# right 이동 ..
문제로봇 청소기와 방의 상태가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오.로봇 청소기가 있는 방은 N × M 크기의 직사각형으로 나타낼 수 있으며, 1 × 1 크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북 중 하나이다. 방의 각 칸은 좌표 (r, c)로 나타낼 수 있고, 가장 북쪽 줄의 가장 서쪽 칸의 좌표가 (0, 0), 가장 남쪽 줄의 가장 동쪽 칸의 좌표가 (N − 1, M − 1)이다. 즉, 좌표 (r, c)는 북쪽에서 (r + 1)번째에 있는 줄의 서쪽에서 (c + 1)번째 칸을 가리킨다. 처음에 빈 칸은 전부 청소되지 않은 상태이다.로봇 청소기는 다음과 같이 작동한다.현재 칸이 아..
문제&링크https://www.acmicpc.net/problem/8972 풀이1. 입력받은 숫자에 맞춰서 종수의 아두이노를 움직인다. 이때 9가지의 입력 종류가 있으니 해당 이동을 표현할 수 있는 배열 x와 y를 활용한다.2. 만약 종수의 아두이노가 움직인 자리가 미친 아두이노가 있는 자리라면 바로 게임을 끝내고 이 순간까지 이동했던 횟수를 출력한다. ex) kraj X3. 종수의 아두이노가 움직인 자리가 안전하다면, 미친 아두이노가 움직인다. 이때 미친 아두이노는 8가지의 방법으로 움직일 수 있다. ex) 종수의 아두이노를 기점으로 9번 방향에 존재한다면 무조건 좌하단 방향으로 움직임 -> 제일 가까워지는 방법4. 미친 아두이노가 이동한 후의 자리는 tmp 행렬에 저장하고, check 행렬을 표시한다..
문제https://www.acmicpc.net/problem/11931풀이* 첫 번째 줄에 앞으로 입력받을 정수의 개수가 입력됨* 두번째 줄부터 입력되는 숫자를 내림차순으로 정렬해 출력해야 함1. 첫 번째 줄에 입력받은 정수만큼 반복하며 리스트에 숫자를 추가하고2. 리스트를 내림차순으로 정렬한 뒤3. 리스트에 저장된 숫자를 한 줄마다 출력해야 함코드 및 설명
문제&링크https://www.acmicpc.net/problem/16395 풀이1. 파스칼의 삼각형을 왼쪽으로 붙인다고 생각한다. 그 경우 직각이 왼쪽 하단에 위치한 하삼각 행렬이 된다.2. 첫 번째 열의 모든 값과 열과 행이 같은 모든 값은 1이기에 초기화를 진행한다.3. 2번에 위치하지 않은 값들은 해당 위치의 바로 위(map[i - 1][j])와 왼쪽 대각선 위(map[i - 1][j - 1])를 더해서 만든다.4. 원하는 행 및 열을 찾아 출력한다. 코드#include using namespace std;int map[31][31];int main() { for (int i = 1; i > N >> M; cout
문제 풀이1과 2와 3일 때의 합의 방법의 수를 정의한다.(n을 만드는 가짓수) == (n-3을 만드는 가짓수) + (n-2를 만드는 가짓수) + (n-1을 가짓수)임을 이용하여 코드를 작성한다. (각 가짓수에 각각 3, 2, 1을 더하면 n이 만들어지기 때문)코드T = int(input()) dp = [0] * 10 dp[0] = 1 dp[1] = 2 dp[2] = 4 for i in range(3, 10):     dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1]      for _ in range(T):     print(dp[int(input()) - 1])
https://www.acmicpc.net/problem/11726알고리즘 분류다이나믹 프로그래밍def tiling(num): dp[num] = dp[num-1] + dp[num-2]n = int(input())dp = [0] * (n+1)dp[0] = 1dp[1] = 2if n > 2: for i in range(2, n): tiling(i)print(dp[n-1] % 10007)문제풀이n=1, 출력=1 / n=2, 출력=2 / n=3, 출력=3 / n=4, 출력 = 5 ...피보나치 수열임을 확인첫 수를 1, 두 번째 수를 2로 두는 피보나치 수열을 만드는 알고리즘을 사용하여 해결왜 피보나치 수열인가?2 x n 크기의 직사각형을 조건에 맞게 채우는 경우의 수는1) 맨 앞에 2 ..
문제 https://www.acmicpc.net/problem/17219 Algorithm1. 저장된 사이트의 주소 수 N과 비밀번호를 찾으려는 사이트 주소의 수 M을 입력을 받는다.2. 파이썬의 딕셔너리를 활용해 N 개의 사이트 주소 수와 비밀번호를 각각 key와 value 값으로 딕셔너리에 저장한다.3. M개의 사이트 주소를 딕셔너리의 key값에 대입해 value 값을 출력한다.   CodeN, M = map(int, (input().split()))d = dict()for i in range(N): k , v = input().split() d[k] = vfor i in range(M): t = input() print(d[t])
문제셀프 넘버는 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)의 생성자라고 한다..
KauKoala
Koala