전체 글 219

[Baekjoon/Python] 11047번: 동전 0 - 효과는 굉장했다!

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 알고리즘 분류 그리디 알고리즘 SOLUTION import sys N, K = map(int, sys.stdin.readline().split()) coin = sorted([int(sys.stdin.readline()) for _ in range(N)], reverse=True) # 동전을 최소로 사용해야하므로 내림차순으로 정렬 print(coin) answer = 0 for i in range(N..

[Baekjoon/Python] 5525번: IOIOI - 효과는 굉장했다!

5525번: IOIOI N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 www.acmicpc.net 알고리즘 분류 문자열 SOLUTION import sys N = int(sys.stdin.readline()) M = int(sys.stdin.readline()) S = list(sys.stdin.readline()) answer = 0 cnt = 0 i = 1 while i < M - 1: if S[i-1] == "I" and S[i] == "O" and S[i+1] == "I": # IOI..

[Softeer/Python] 조립라인 ★★★☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++(1초), Java/Python/JS(2초) | 메모리 제한 : 256MB 동일한 자동차를 생산하는 2개의 조립 라인 A와 B가 있다. 두 조립라인에는 각각 N개의 작업장이 있다. 각각의 작업장을 Ai (1 ≤ i ≤ N)와 softeer.ai SOLUTION import sys N = int(sys.stdin.readline()) assembly_line = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] # Dynamic Programiing 활용 dp = [[0,0]] * N dp[0] = [assembly_line[0][0], assembly_line[0][1]] for i in range(1,..

[Softeer/Python] 강의실 배정 ★★★☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++(1초), Java/Python/JS(2초) | 메모리 제한 : 256MB 김교수는 강의실 1개에 최대한 많은 강의를 배정하려고 한다. 배정된 강의는 서로 겹치지 않아야 하며 수업시간의 길이와 상관없이 최 softeer.ai SOLUTION ※ 실패한 코드 lambda를 이용해 정렬을 하는 코드를 짜는데 시간초과의 문제가 발생했다. import sys N = int(sys.stdin.readline()) meeting_time = [[0] * 2 for _ in range(N)] for i in range(N): start, end = map(int, sys.stdin.readline().split()) meeting_time[i][0] = start meeting_t..

[Baekjoon/Python] 1780번: 종이의 개수 - 효과는 굉장했다!

1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 알고리즘 분류 분할 정복 재귀 SOLUTION import sys def clip_paper(x, y, n): global zero, one, min_one check_num = paper[x][y] for i in range(x, x + n): for j in range(y, y + n): if paper[i][j] != check_num: # 모든 종이가 같은 수로 되어 있지 않으므로 종이를 9등분 한다 for k in range(3): for l..

[Baekjoon/Python] 1541번: 잃어버린 괄호 - 효과는 굉장했다!

1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 알고리즘 분류 수학 문자열 그리디 알고리즘 파싱 SOLUTION import sys s = sys.stdin.readline().rstrip().split('-') # -를 기준으로 나눠서 리스트화 ans = 0 # -를 기준으로 안나눠진다는 것은 + 식이므로 +를 기준으로 나눠서 더해줌 for i in s[0].split('+'): ans += int(i) for i in s[1:]: for j in i.split('+'): # +가 있다고 더해주는 것이..

[Baekjoon/Python] 1012번: 유기농 배추 - 효과는 굉장했다!

1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 알고리즘 분류 그래프이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 SOLUTION import sys sys.setrecursionlimit(10000) # 파이썬에서 기본 재귀의 깊이의 제한은 1000이므로 임위로 늘려줘야 한다 def dfs(x,y): dir = [[0,1],[0,-1],[1,0],[-1,0]] # 방향설정 for diff in dir: dx = x + diff[1] # 1 -1 0 0 dy = y + diff[0] # 0 0 1 -1 if (0

[Softeer/Python] 우물 안 개구리 ★★★☆☆ - 효과는 굉장했다!

Softeer 제한시간: C/C++(1초), Java/Python/JS(2초) | 메모리 제한: 256MB 헬스장에서 N명의 회원이 운동을 하고 있다. 각 회원은 1에서 N사이의 번호가 부여되어 있고, i번 회원이 들 수 있는 역기의 무게는 Wi이다. softeer.ai SOLUTION import sys N, M = map(int, sys.stdin.readline().split()) W = list(map(int, sys.stdin.readline().split())) isBest = [True] * N cnt = 0 for _ in range(M): A, B = map(int, sys.stdin.readline().split()) if W[A-1] > W[B-1]: # B회원이 A보다 못 들기 때문..

[Softeer/Python] 성적 평균 ★★★☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++(1초), Java/Python/JS(2초) | 메모리 제한 : 256MB N명의 학생들의 성적이 학번순서대로 주어졌다. 학번 구간 [A, B]가 주어졌을 때 이 학생들 성적의 평균을 구하는 프로그램을 작성하라. softeer.ai SOLUTION import sys N, K = map(int, sys.stdin.readline().split()) score = list(map(int, sys.stdin.readline().split())) for _ in range(K): A, B = map(int, sys.stdin.readline().split()) avaerage_score = sum(score[A-1:B]) / (B-A+1) # 슬라이싱을 이용해 학생들의 총점..

[프로그래머스/Python] LV.1 로또의 최고 순위와 최저 순위 - 효과는 굉장했다!

문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다. 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다. 알아볼 수 없는 두 개의 번호를 각각 10, ..