728x90
반응형

개발 61

[Baekjoon 1074 / Python / 골드5] Z

# 정사각형 한 변의 길이 : 2, 4, 8 ....import sysinput = sys.stdin.readline# 2의 N승 크기, R행 C열N, R, C = map(int, input().split())# 행/열이 길이 나누기 2이상이면 -> 행 : 아래쪽 사분면/ 열 : 오른쪽 사분면le = 2**N# 결과값 편하게 더하기 위해 만든 배열num = [[0,1], [2,3]]# 각사분면 0,0값, 변길이, 행, 열def divide(z, le, row, col):    if le == 2: # 2*2 정사각형 도달 시        print(z + num[row][col])        return    plus = (le * le) // 4 # 각 사분면 0,0 값의 차이    half = le..

[Baekjoon 2110 / Python / 골드4] 공유기 설치

import sysinput = sys.stdin.readline# 집, 공유기 개수N, C = map(int, input().split())house = [int(input()) for _ in range(N)]  # 집 좌표house.sort() # 집을 순서대로 정렬# 이분 탐색으로 인접 공유기 간의 최소 거리를 찾는다def binarySearch():    end = house[-1] - house[0] # 최대 거리    if C == 2:        return end    start = 1 # 최소 거리    result = 0 # 결과를 저장할 변수    # 최적의 거리를 찾을 때까지 반복한다    while start end:        cur = house[0] # 마지막으로 공유..

[Baekjoon 9095 / Python / 실버3] 1, 2, 3 더하기

import sysinput = sys.stdin.readlineN = int(input())def plus(num):    if num == 1:        return 1    elif num == 2:        return 2    elif num == 3:        return 4    else:        return plus(num-1) + plus(num-2) + plus(num-3)for _ in range(N):    print(plus(int(input()))) 재귀 방식( 바람직하지 않음 ) DP문제다. 두가지 방식으로 풀어보았다. 하나는 재귀 방식, 하나는 DP테이블을 사용하는 방식.이해를 하긴 했으나 뭔가 와닿지가 않는다. 아 이런거구나~ 하고 이해해놓고 잠시 뒤에, 근..

[Baekjoon 11055 / Python / 실버2] 가장 큰 증가하는 부분 수열

import copyimport sysinput = sys.stdin.readlineN = int(input())numList = list(map(int, input().split()))dp = copy.deepcopy(numList)for i in range(1, N):    for j in range(i):        if numList[i] > numList[j]:            dp[i] = max(dp[i], dp[j] + numList[i])print(max(dp)) 가장 긴 증가하는 부분 수열(LIS)문제와 거의 흡사한 문제이다. 문제의 원리는 거의 같지만 요구하는 출력값이 다르다. LIS는 수열이 길이를 출력했다면, 이 문제는 수열을 모두 더한 값을 출력한다. dp테이블로 사용하기 ..

[Baekjoon 11053 / Python / 실버2] 가장 긴 증가하는 부분 수열

import sysinput = sys.stdin.readlineN = int(input())numList = list(map(int, input().split()))dp = [1] * Nfor i in range(1, N):    for j in range(i):        if numList[i] > numList[j]:            dp[i] = max(dp[i], dp[j]+1)print(max(dp)) Longest Increasing Subsequence(LIS) 문제로, DP유형의 대표적인 문제 중 하나다.처음엔 문제만 보고 뭐야 이게 진짜 실버2라고..? 란 생각과 함께 코드를 짜서 제출했지만 역시 실패했다. 나는 크게 두 가지를 간과했다.1. 수열이 첫 번째 숫자부터 시작할 필요..

[Baekjoon 1911 / Python / 골드5] 흙길 보수하기

import sysinput = sys.stdin.readline# N개의 웅덩이, L길이의 널빤지N, L = map(int, input().split())water = []# 겹치는 웅덩이는 들어오지 않는다# 웅덩이 좌표 : [1, 6] -> 1 2 3 4 5for _ in range(N):    water.append(list(map(int, input().split())))sortedWater = sorted(water, key=lambda x: (x[0])) # 시작 위치 기준으로 정렬def fix(size, L):    if size % L >= 1:        return size // L + 1    else:        return size // Ldef solve():    resul..

Algorithm/Greedy 2024.08.19

[Baekjoon 11652 / Python / 실버4] 카드

import sysinput = sys.stdin.readlineN = int(input()) # 카드 개수cards = {}for _ in range(N):    # 카드를 key로 등록하고 등장할 때마다 value를 1씩 증가시킨다    num = int(input())    if num in cards:        cards[num] += 1    else:        cards[num] = 1# items()를 붙여 튜플 형태로 변환한다. 딕셔너리를 정렬하기 위해 필요한 작업.# -x[1] : -를 붙이면 내림차순 정렬을 하게 된다.sortedCards = sorted(cards.items(), key=lambda x: (-x[1], x[0]))print(sortedCards[0][0]) 정렬..

Algorithm/정렬 2024.08.19

[Baekjoon 13335 / Python / 실버1] 트럭

from collections import dequeimport sysinput = sys.stdin.readlineN, W, L = map(int, input().split())truck = list(map(int, input().split()))q = deque([0] * W) # 큐 사용time = 0 # 경과시간while q:    time += 1 # 반복할 때마다 시간 증가    q.popleft()    if truck:        if sum(q) + truck[0] L: # 무게 제한에 걸리지 않으면 다리에 올리기            q.append(truck.pop(0))        else:            q.append(0) # 무게에 걸렸다면, 다리길이를 맞추기 위해 0..

Algorithm/Queue 2024.08.16

[Baekjoon 15666 / Python / 실버2] N과 M (12)

import sysinput = sys.stdin.readlineN, M = map(int, input().split())numbers = list(map(int, input().split()))numbers.sort()result = [-1] * Mdef compare(a, b):    if a > b:        return False    return Truedef backTracking(depth):    if depth == M:        print(' '.join(map(str, result)))        return        temp = 0    for i in range(N):        if temp != numbers[i] and (depth == 0 or compare(..

[Baekjoon 15665 / Python / 실버2] N과 M (11)

import sysinput = sys.stdin.readlineN, M = map(int, input().split())numbers = list(map(int, input().split()))numbers.sort()result = [-1] * Mdef backTracking(depth):    if depth == M:        print(' '.join(map(str, result)))        return        temp = 0    for i in range(N):        if temp != numbers[i]:            temp = numbers[i]            result[depth] = numbers[i]            backTracking(d..

728x90
반응형