GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이 228

Baekjoon Online Judge 1744번. 그리디.

문제 링크 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) positive = [] negative = [] result = 0 for i in range(N): num = int(input()) if num > 1: positive.append(num) elif num = len(positive): #같이 곱해질 짝이 없으면 더하기 result += posi..

Baekjoon Online Judge 11399번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) P = list(map(int,sys.stdin.readline().split())) P = sorted(P) min = 0 result = 0 for i in P: min += i result += min print(result)

Baekjoon Online Judge 1931번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 정답 코드 import sys N = int(sys.stdin.readline()) I = [] for i in range(N): I.append(list(map(int,sys.stdin.readline().split()))) I = sorted(I,key=lambda x:x[0]) #시작시간 기준 오름차순 정렬 I = sorted(I,key=lambda x:x[1]) #종료시간 기준 오름차순 정렬 last = 0 #회의가 끝나는 시간 count = 0 #회의 개수 세기 for i,j in I: if ..

Baekjoon Online Judge 1783번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/1783 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net N = 1 이동할 수 없으므로 방문 할 수 있는 칸 수는 1. N = 2 위로 한 번,오른쪽 두번과 아래로 한 번, 오른쪽 두번. 이 두가지 이동패턴만 가능하다. 그런데, 4번 이상 이동하면 이동 패턴을 한번씩만 사용해야 한다. 그리고 이는 M의 길이에 따라 달라진다. M이 6보다 커질 때부터 이동 횟수가 4번이 되기 때문에 더 이상 이동할 수 없게 된다. 열의 크기 / 방문한 칸 수 M = 1 -> 1 M = 2 -> 1 M = 3 -> 2 M = ..

Baekjoon Online Judge 10610번 파이썬. 그리디.

문제 링크 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 30의 배수가 되려면, 3의 배수이며, 1의 자리가 0이어야한다. 3의 배수가 되려면, 각 자리 수의 합이 3의 배수가 되어야 한다. 이를 만족시키고, 내림차순 정렬을 하면 30의 배수가 될 수 있는 가장 큰 수를 구할 수 있다. 정답 코드 N= list(map(int,input())) sum = 0 for i in N: sum += i if sum % 3 != 0 or 0 not in ..

Baekjoon Online Judge 2875번. 그리디

문제 링크 https://www.acmicpc.net/problem/2875 2875번: 대회 or 인턴 첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100, 0 ≤ N ≤ 100, 0 ≤ K ≤ M+N), www.acmicpc.net 적어도 여학생이 2명, 남학생이 1명이 있어야 팀 1개가 만들어진다. 그래서 여학생이 2명 이상, 남학생이 1명 이상이고, 인턴십에 간 학생들보다 3명이 많아야 적어도 한 팀이 만들어지므로 ‘while N>=2 and M>=1 and N+M >= K+3:’로 작성한다. 정답 코드 import sys N,M,K = map(int,sys.stdin.readline().split()) team = 0 while N>=2 and M>=1 and N+M >= K+..

Baekjoon Online Judge 11047번 파이썬. 그리디

문제 링크 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 정답 코드 import sys N, K = map(int,sys.stdin.readline().split()) money = [] for i in range(N): money.append(int(sys.stdin.readline())) count = 0 bill = money[len(money)-1] def greedy(K..

Baekjoon Online Judge 1629번 파이썬. 분할 정복.

문제 링크 https://www.acmicpc.net/problem/1629 1629번: 곱셈 첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다. www.acmicpc.net A^(m+n) = A^m * A^n (A*B)%C = (A%C)*(B%C)%C 위의 지수법칙. 분배 법칙을 알아두어야 한다. 정답 코드 A,B,C = map(int,input().split()) def solution(a,b,c): if b == 1: #a의 1제곱이면. return a%c N = solution(a,b//2,c) # a^(b//2) 구하기 if b % 2 == 0: #b가 짝수 return N*N%c #지수 법칙 사용 else: #b..

Baekjoon Online Judge 1780번 파이썬. 분할 정복.

문제 링크 https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 2630번 문제와 유사하다. 다른 점은 9개로 자르는 것이기 때문에 ‘N//3’을 하고, 재귀함수의 시작점. x,y가 9개 있다는 것이다. 정답 코드 N = int(input()) matrix = [list(map(int,input().split()))for i in range(N)] result = [] def solution(x,y,N): number = matrix[x]..

Baekjoon Online Judge 1992번 파이썬. 분할 정복.

문제 링크 https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 2630번과 유사한 문제이다. 하지만 2630번처럼 반복문 안에서 프린팅할 문자열 “(“나 “)”를 추가하면 불필요한 경우에도 괄호가 생기기 때문에 반복문 밖에서 추가해주어야 한다, 출력에 신경써서 풀어야한다. 정답 코드 N = int(input()) tree = [list(map(int,input()))for i in range(N)] def solution(x,y,N):..

728x90