분류 전체보기

문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.풀이dp배열을 이용한다. 이 때 dp[n]의 의미는 n번째 원소를 포함한 연속 부분합 중 최대값을 뜻한다. dp배열의 첫 번째 원소 값을 입력받은 수열의 첫 번째 값으로 설정하고,..
문제명절이 되면, 홍익이 집에는 조카들이 놀러 온다. 떼를 쓰는 조카들을 달래기 위해 홍익이는 막대 과자를 하나씩 나눠준다.조카들이 과자를 먹는 동안은 떼를 쓰지 않기 때문에, 홍익이는 조카들에게 최대한 긴 과자를 나눠주려고 한다.그런데 나눠준 과자의 길이가 하나라도 다르면 조카끼리 싸움이 일어난다. 따라서 반드시 모든 조카에게 같은 길이의 막대 과자를 나눠주어야 한다.M명의 조카가 있고 N개의 과자가 있을 때, 조카 1명에게 줄 수 있는 막대 과자의 최대 길이를 구하라.단, 막대 과자는 길이와 상관없이 여러 조각으로 나눠질 수 있지만, 과자를 하나로 합칠 수는 없다. 단, 막대 과자의 길이는 양의 정수여야 한다.입력첫째 줄에 조카의 수 M (1 ≤ M ≤ 1,000,000), 과자의 수 N (1 ≤ N..
문제 https://www.acmicpc.net/problem/10773Codeimport sysK = int(sys.stdin.readline()) stack = [] sum_v = 0 for i in range(K): num = int(sys.stdin.readline()) if stack and num == 0: stack.pop() else: stack.append(num)print(sum(stack))
문제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])
KauKoala
'분류 전체보기' 카테고리의 글 목록 (6 Page)