목록Python/이코테 (25)
가오리의 코딩일기
N가지 종류의 화폐가 있다 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M원이 되도록 하려고 한다 이때 각 화폐는 몇 개라도 사용할 수 있으며, 사용한 화폐의 구성은 같지만 순서만 다른 것은 같은 경우로 구분한다. 예를 들어 2원, 3원 단위의 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수이다 입력조건 → 첫째 줄에 N,M이 주어진다 (1
가로의 길이가 N, 세로의 길이가 2인 직사각형 형태의 얇은 바닥이 있다 태일이는 이 얇은 바닥을 1x2, 2x1의 덮개, 2x2의 텁개를 이용해 채우고자 한다 이때 바닥을 채우는 모든 경우의 수를 구하는 프로그램을 작성하시오 예를 들어 2x3 크기의 바닥을 채우는 경우의 수는 5가지이다 입력조건 → 첫째 줄에 N이 주어진다 (1
개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려고 한다 메뚜기 마을에는 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다 각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다 이때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식량창고가 공격받으면 바로 알아챌 수 있다 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다 예를 들어 식량창고 4개가 다음과 같이 존재한다고 가정하지 {1,3,1,5} 이때 개미전사는 두 번째 식량창고와 네 번째 식량창고를 선택했을 때 최댓값인 총 8개의 식량을 빼앗을 수 있다. 개미..
정수 x가 주어질 때 정수 x에 사용할 수 있는 연산은 다음과 같이 4가지이다 a. x가 5로 나누어떨어지면 5로 나눈다 b. x가 3으로 나누어떨어지면 3으로 나눈다 c. x가 2로 나누어떨어지면 2로 나눈다 d. x에서 1을 뺀다 정수 x가 주어졌을 때 연산 4개를 적절히 사용해서 1을 만들려고 한다 연산을 사용하는 횟수의 최솟값을 출력하시오 입력조건 → 첫째 줄에 정수 x가 주어진다 출력조건 → 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다 # [이코테] 1로 만들기 number = int(input()) table = [0] * 30001 for i in range(2, number+1): table[i] = table[i-1] + 1 if i % 5 == 0: table[i] = min(tab..
오늘 동빈이는 여행 가신 부모님을 대신해서 떡집 일을 하기로 했다. 오늘은 떡볶이 떡을 만드는 날이다. 동빈이네 떡볶이 떡은 재밌게도 떡볶이 떠그이 길이가 일정하지 않다. 대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다. 절단기에 높이(H)를 지정하면 줄지어진 떡을 한번에 절단한다. 높이가 H보다 긴 떡은 H 위의 부분이 잘린 것이고 낮은 떡은 잘리지 않는다. 예를 들어 높이가 19, 14,10,17cm인 떡이 나란히 있고 절단기 높이를 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14,10,15cm가 될 것이다. 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm이다. 손님은 6cm만큼의 길이를 가져간다. 손님이 왔을 때 요청한 총 길이가 M일 때 적어도 M만큼의 떡을 얻기 위..
동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개의 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다.이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 이때 손님이 요청한 부품 번호의 순서대로 부품을 확인해 부품이 있으면 yes를, 없으면 no를 출력한다. 구분은 공백으로 한다. 입력 첫째 줄에 정수 N이 주어진다. 둘째 줄에는 공백으로 구분하여 N개의 정수가 주어진다. 이때 정수는 1보다 크고 1,000,000 이하이다. 셋째 줄에는 정수 M이 주어진다 넷째 줄에는 공백으로 구분하여 M개의 정수가 주어진다. 이때 정수..
동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 동빈이의 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이며 여러분은 동빈이를 도와야 한다 N,K 그리고 배열 A와 B의 정보가 주어졌을 때 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최댓값을 출력하는 프로그램을 작성하시오. 예를 들어 N=5, K=3이고 배열 A와 B가 다음과 같다고 하자 - 배열 A = [1,2,5,4,3] - 배열 B = [5,5,6,6,..
N개의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오. 입력조건 - 첫 번째 줄에 학생의 수 N이 입력된다. - 두 번째 줄부터 N+1번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100이하의 자연수이다. 출력조건 - 모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다. n = int(input()) student = [] for i in range(n): in_ = input().split() student.appen..
하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다. 이 수를 큰 수부터 작은 수의 순서대로정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오. 입력 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다 둘째 줄부터 N+1번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수이다 출력 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다. 동일한 수의 순서는 자유롭게 추력해도 괜찮다. n = int(input()) array = [] for i in range(n): array.append(int(input())) array.sort(reverse=True) # array= sorted(array, rever..
N x M 크기의 직사각형 형태의 미로에 여러 마리의 괴몰이 있어 이를 피해 탈출해야 한다. 현재 위치는 (1,1)이고 미로의 출구는 (N,M)의 위치에 존재하며 한 번에 한 칸씩 이동할 수 있다. 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하라. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다. 입력 첫째 줄에 두 정수 N,M(4= m: continue if maze[nx][ny] == 0: continue if maze[nx][ny] == 1: maze[nx][ny] = maze[x][y] + 1 queue.append((nx, ny)) return maze[n - ..