전체 글 219

[Softeer/Python] 택배 마스터 광우 ★★★☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++/Java/Python/JS(2초) | 메모리 제한 : 256MB 여름 휴가를 떠나기 위해 용돈이 필요했던 광우는 H택배 상하차 아르바이트를 지원 했다. 광우는 평소에 운동을 하지않아 힘쓰는 데에 자신 softeer.ai SOLUTION import sys from itertools import permutations def UpandDown(rail): total = 0 cnt = 0 # 첫번째 레일부터 탐색하기 위해 선언 for i in range(K): basket = 0 while True: basket += rail[cnt] cnt = (cnt+1) % N # 마지막레일에 다다르면 다시 첫번째 레일부터 탐색 if basket + rail[cnt] > M: # ..

[Softeer/Python] [21년 재직자 대회 예선] 회의실 예약 ★★☆☆☆ - 효과는 굉장했다!

Softeer 제한시간 : C/C++/Java/JS/Python(1초)| 메모리 제한 : 1024MB 회사에는 N개의 회의실이 있다. 수많은 팀이 모여 토론하고 업무를 처리하기 위해서는 회의실이 필수적이다. 내부망에 아주 간단한 회의실 softeer.ai SOLUTION import sys N, M = map(int,sys.stdin.readline().split()) conference_room = {} # dictionary 형태 회의실 이름과 시간을 저장하기 위해 사용 # 회의가 가능한 시간은 09 ~ 18 사이이고 최소 1시간 간격이므로 1시간 간격으로 시간 생성 for __ in range(N): room_name = sys.stdin.readline().rstrip() conference_ro..

[Baekjoon/Python] 11727번: 2×n 타일링 2 - 효과는 굉장했다!

11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 SOLUTION import sys n = int(sys.stdin.readline()) dp = [0] * 1001 # n은 최대 1000까지 이므로 1001개 생성(0번째 포함) # n == 2일때 까지는 규칙성이 보이지 않으므로 따로 생성 dp[0] = 0 dp[1] = 1 dp[2] = 3 for i in range(3, 1001): dp[i] = dp[i-1] + (dp[i-2] * 2) # n>=3 일때 다음과 같은 규칙이 성립된다 print(dp[..

[Baekjoon/Python] 11726번: 2×n 타일링 - 효과는 굉장했다!

11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 SOLUTION import sys n = int(sys.stdin.readline()) dp = [0] * 1001 # n은 최대 1000까지 이므로 1001개 생성(0번째 포함) # n == 2일때 까지는 규칙성이 보이지 않으므로 따로 생성 dp[0] = 0 dp[1] = 1 dp[2] = 2 for i in range(3, 1001): dp[i] = dp[i-1] + dp[i-2] # n>=3 일때 다음과 같은 규칙이 성립된다 print(dp[n..

[Baekjoon/Python] 11659번: 구간 합 구하기 4 - 효과는 굉장했다!

11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 알고리즘 분류 누적 합 SOLUTION import sys N, M = map(int, sys.stdin.readline().split()) nums = list(map(int, sys.stdin.readline().split())) sum_list = [0] for i in range(N): sum_list.append(sum_list[-1] + nums[i]) # 미리 누적합을 구해놓음 for _ in range(M): i, j = ma..

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

11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 알고리즘 분류 그리디 알고리즘 정렬 SOLUTION import sys N = int(sys.stdin.readline()) p = list(map(int, sys.stdin.readline().split())) p.sort() # 시간의 합의 최솟값을 출력해야하므로 정렬 sum = 0 cnt = N for i in range(N): sum += p[i] * cnt #첫번째 사람은 총인원수 만큼 더해지고 두번째 사람은 총인원수-1 만큼 더해지는 형식 cnt -= 1 print(sum)

[Baekjoon/Python] 9461번: 파도반 수열 - 효과는 굉장했다!

9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 알고리즘 분류 수학 다이나믹 프로그래밍 SOLUTION import sys dp = [1,1,1,2,2] # P(1) ~ P(5) T = int(sys.stdin.readline()) for _ in range(T): num = int(sys.stdin.readline()) if num >= 6: # num이 6 이상일 때에는 dynamic programming을 이용해 구함 for i in range(5, num): dp.append(dp[i-1] + dp[i-5]..

[Baekjoon/Python] 9375번: 패션왕 신해빈 - 효과는 굉장했다!

9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 알고리즘 분류 수학 자료 구조 해시를 사용한 집합과 맵 SOLUTION import sys from collections import Counter T = int(sys.stdin.readline()) for _ in range(T): n = int(sys.stdin.readline()) type_list = [] for _ in range(n): clothes, typ..

[Baekjoon/Python] 9095번: 1, 2, 3 더하기 - 효과는 굉장했다!

9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 SOLUTION import sys T = int(sys.stdin.readline()) model = [1, 2, 4] # 3번째 경우까지는 직접 생성 for i in range(3, 10): # n은 10까지 이므로 model.append(model[i - 3] + model[i - 2] + model[i - 1]) # 4부터 ~ n까지는 그 전, 전전, 전전전단계 경우의 수의 총합이다. # ex) model[4] = model[1] + model[2] + model[3] = 1 + 2 + 4 = 7 for _ in ran..

[Baekjoon/Python] 2630번: 색종이 만들기 - 효과는 굉장했다!

2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 알고리즘 분류 분할 정복 재귀 SOLUTION import sys def paper(x, y, N) : color = paper_list[x][y] for i in range(x, x+N) : for j in range(y, y+N) : if color != paper_list[i][j] : # 같은 색이 아니면 4개의 구역으로 나눔 paper(x, y, N//2) # 왼쪽 위 paper(x, y+N//2, N//2) # 오른쪽 위 p..