프로그래밍/Python 85

백준_python 1244번 스위치 켜고 끄기 (구현)

링크>https://www.acmicpc.net/problem/1244  12345678910111213141516171819202122232425import sysinput = sys.stdin.readline N = int(input())        # 스위치 수switch = [-1] + list(map(int, input().split()))M = int(input())        # 학생 수 for _ in range(M):    student, num = map(int, input().split())    if student == 1:    # 남학생일 경우        for i in range(num, N+1, num):            switch[i] = 1 - switch[i]..

백준_python 1149번 RGB거리 (DP)

링크>https://www.acmicpc.net/problem/1149   123456789101112n = int(input())arr = [list(map(int, input().split())) for _ in range(n)] dp = [[0]*3 for _ in range(n)]dp[0] = arr[0] for i in range(1, n):    dp[i][0] = min(dp[i-1][1], dp[i-1][2]) + arr[i][0]    dp[i][1] = min(dp[i-1][0], dp[i-1][2]) + arr[i][1]    dp[i][2] = min(dp[i-1][0], dp[i-1][1]) + arr[i][2] print(min(dp[n-1]))Colored by Color Sc..

백준_python 11053번 가장 긴 증가하는 부분 수열 (DP)

링크>https://www.acmicpc.net/problem/11053  sol ) 다이나믹 프로그래밍으로 가장 긴 증가하는 수열 구하기12345678910111213n = int(input())a = list(map(int, input().split())) dp = [0 for _ in range(n)] for i in range(n):    for j in range(i):        if a[i] > a[j] and dp[i]  dp[j]:            dp[i] = dp[j]    dp[i] += 1    #print(i, dp)    print(max(dp))cs line 6 ) 배열 a의 i번째 원소를 기준으로line 8 ) i번째 원소가 j번째 원소들보다 크고(=증가하는 수열) a..

백준_python 23057번 도전 숫자왕 (set, combinations)

링크>https://www.acmicpc.net/problem/23057   sol )  combinations로 조합을 뽑고, set에 합 저장12345678910111213from itertools import combinations n = int(input())nums = list(map(int, input().split()))m = sum(nums) sums = set() for i in range(1, n+1):    for j in combinations(nums, i):        sums.add(sum(j)) print(m - len(sums))cs set()를 사용해 중복을 고려하지 않고 모든 조합의 합을 저장한다.m에서 sums의 길이를 빼면 만들어지지 않은 수의 개수를 얻게 된다.

백준_python 2910번 빈도 정렬 (해시, 정렬, lambda)

링크>https://www.acmicpc.net/problem/2910 주어진 수열을 빈도, 출현순서 순으로 정렬하여 출력  sol 1) 딕셔너리에 저장 후 람다식으로 정렬 (72ms)1234567891011121314from collections import defaultdict n, c = map(int, input().split())nums = list(map(int, input().split())) dic = defaultdict(int)for i in nums:    dic[i] += 1 sorted_dic = sorted(dic.items(), key = lambda x: (-x[1], list(dic.keys()).index(x[0]))) for i, j in sorted_dic:    fo..

백준_python 2579번 계단 오르기 (DP)

링크>https://www.acmicpc.net/problem/2579  123456789101112131415161718192021222324252627import sysinput = sys.stdin.readline n = int(input()) stairs = [0] * 301for i in range(1, n + 1):    stairs[i] = int(input()) if n == 1:    print(stairs[1])    exit(0) elif n == 2:    print(stairs[1] + stairs[2])    exit(0)  dp = [0] * 301dp[1] = stairs[1]dp[2] = stairs[1] + stairs[2]dp[3] = max(stairs[1] + sta..

백준_python 15686번 치킨 배달(combiantions, 백트래킹)

링크>https://www.acmicpc.net/problem/15686 15686번: 치킨 배달크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸www.acmicpc.net    sol1) itertools.combinations 사용12345678910111213141516171819202122232425262728293031323334from itertools import combinations # 입력n, m = map(int, input().split())town = [list(map(int, input().split())) for _ ..

백준_python 2805번 나무 자르기 (이분 탐색, 시간초과)

링크>https://www.acmicpc.net/problem/2805  12345678910111213141516171819n, m = map(int, input().split())trees = list(map(int, input().split())) start, end = 1, max(trees) while start = end:    mid = (start + end) // 2     log_sum = 0     # 현재 높이에서 벌목 나무 합    for i in trees:        if i >= mid:            log_sum += i - mid        if log_sum >= m:        start = mid + 1    else:        end = mid -1..

백준_python 4358번 생태학 (소수 반올림)

링크>https://www.acmicpc.net/problem/4358 12345678910111213141516171819import sysfrom collections import defaultdictfrom decimal import Decimal, ROUND_HALF_UPinput = sys.stdin.readline trees = defaultdict(int) while True:    tree = input().rstrip()     # 입력값이 더 없으면 입력 종료    if tree == '':        break        trees[tree] += 1 for i in sorted(trees):    v = Decimal(f'{trees.get(i) / sum(trees.values..

백준_python 1269번 대칭 차집합

링크>https://www.acmicpc.net/problem/1269   sol 1) 대칭 차집합 연산자 사용123456a, b = map(int, input().split()) set_a = set(map(int, input().split()))set_b = set(map(int, input().split())) print(len(set_a ^ set_b))cs 파이썬에서 제공하는 대칭 차집합 연산자 : ^   sol 2) 교집합 연산자 사용12345678a, b = map(int, input().split()) set_a = set(map(int, input().split()))set_b = set(map(int, input().split())) both = len(set_a & set_b) pri..