목록Programming/Algorithm (11)
Devvy-Is-Free
https://school.programmers.co.kr/learn/courses/30/lessons/134240 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 가운데 0을 기준으로 문자열이 대칭을 이루는 것 확인 => 왼쪽 먼저 문자열 붙여준 뒤, 좌우반전시켜서 이어 붙이기 def solution(food): l_answer = '' r_answer = '' for i in range(1, len(food)): r_num = food[i] // 2 l_answer += str(i) * r_num print(l_answer) answer = l_answ..
프로그래머스 level 1 정렬 K번째수 https://school.programmers.co.kr/learn/courses/30/lessons/42748 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(array, commands): answer = [] for [i, j, k] in commands: answer.append(sorted(array[i - 1: j])[k - 1]) return answer append 배열 뒤에 삽입 매개변수 그 자체를 원소로 삽입 a = [] a.append(3) insert 삽입 순서와 요소를..
import sys input = sys.stdin.readline N = int(input()) assembly_line = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] dp = [[0 , 0]] * N dp[0] = [assembly_line[0][0], assembly_line[0][1]] for i in range(1, N): dp[i] = [min(dp[i-1][0], dp[i-1][1] + assembly_line[i-1][3]) + assembly_line[i][0], # A 조립라인 min(dp[i-1][1], dp[i-1][0] + assembly_line[i-1][2]) + assembly_line[i][1]] # ..
import sys input = sys.stdin.readline n, b = map(int, input().split()) num_list = list(map(int, input().split())) num_dict = {} num_list = sorted(num_list, reverse = True) left = num_list[-1] right = 2000000000 for i in num_list: if (i not in num_dict.keys()): num_dict[i] = 1 else: num_dict[i] += 1 while(right - left > 1): mid = (right + left) // 2 cur_cost = 0 isLeft = 1 for k, v in num_dict.it..
import sys input = sys.stdin.readline W, N = map(int, input().split()) stone = [] for _ in range(N): mp = list(map(int, input().split())) stone.append(mp) stone.sort(key = lambda x : -x[1]) price = 0 for m, p in stone: if m
import sys input = sys.stdin.readline N, M = map(int, input().split()) W = list(map(int, input().split())) member = [True] * N for _ in range(M): a, b = map(int, input().split()) if W[a - 1] > W[b - 1]: member[b - 1] = False elif W[a - 1] < W[b - 1]: member[a - 1] = False else: member[a - 1] = False member[b - 1] = False answer = 0 for mem in member: if mem == True: answer += 1 print(answer)
기존 작성했던 코드 import sys N = int(sys.stdin.readline()) time = [] for _ in range(N): startTime, endTime = map(int, sys.stdin.readline().split()) time.append([startTime, endTime]) time.sort(key = lambda a: (a[1], a[0])) count = 0 endT = 0 for start, end in time: if start >= endT: count += 1 endT = end print(count) 파이썬의 sorted 함수를 사용하여 정렬하게 되면 O(NlogN)으로 시간 초과 발생 -> 오류 정답 import sys import heapq N = i..
import sys K, P, N = map(int, sys.stdin.readline().split()) print(K * pow(P, N, int(1000000007)) % int(1000000007)) 파이썬 내장함수 pow (base, exp, mod) == (base ** exp) % mod math.pow() math.pow(base, exp) -> 결과값은 항상 float import sys K, P, N = map(int, sys.stdin.readline().split()) print(K * pow(P, N * 10, int(1000000007)) % int(1000000007))
시간 복잡도 : O(NlogN) ✨A[i]보다 작은 A[j]를 가지는 j들 중 가장 큰 B[j]를 찾기✨ (●'◡'●)정답코드(●'◡'●) import sys import bisect N = int(sys.stdin.readline()) stone = list(map(int, sys.stdin.readline().split())) A = [stone[0]] # 앞에서부터 밟는 돌의 높이 A_c = [1] * N # 돌을 밟을 수 있는 개수 for i in range(N): if stone[i] > A[-1]: # 높이가 더 높아진다면 A.append(stone[i]) else: # 이분탐색으로 현재 높이보다 더 작은 높이 중 가장 큰 높이의 index(앞으로)(왜냐면 대체하는 값인거니까) index = ..
import sys N, K = map(int, sys.stdin.readline().split()) score = list(map(int, sys.stdin.readline().split())) for i in range(K): a, b = map(int, sys.stdin.readline().split()) avg = sum(score[a - 1:b]) / (b - a + 1) print('%.2f'%avg) 소수점 둘째자리까지 00으로 출력 print('%.2f'%x)