본문 바로가기

백준 파이썬 코딩

(49)
백준 17135 캐슬 디펜스 파이썬 문제에 주어진 조건들만 잘 활용하면 쉽게 풀 수 있는 문제였다. 자세한 코드 설명은 코드와 함께 하겠습니다. from itertools import combinations import copy import heapq #개인적으로 heap사용 덕분에 쉽게 푼거 같다. def bfs(t,sk):#거리에 맞는거 찾기(t = 조합중에 하나,sk=s배열을 deepcopy한것) hpq = [] for i in range(n): for j in range(m): if sk[i][j]==1:#만약에 병사가 있다면 for u in t:#각 사수들로부터 거리를 구해줌 if abs(n-i)+abs(u-j)
백준 13144 List of Unique Numbers 파이썬 주석 설명 O https://www.acmicpc.net/problem/13144 13144번: List of Unique Numbers 길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라. www.acmicpc.net 중복된 수가 나왔는지 확인해주는 배열 ch를 나올 수 있는 숫자의 최대 크기 +1 길이 만큼 만들어줬다. 처음에는 시작 지점을 0~n-1 idx로 잡고 거기서 부터 앞으로 나아가는 동시에 최종 값에 +1을 해줬다. 만약 중복된 수가 나오면 멈추고 이전에 나왔던 수를 모두 False로 바꿔주면서 다시 ch 배열을 재사용했다. n = int(input()) s = list(map(int,input().spl..
백준 15903 카드 합체 놀이 파이썬 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 기본적인 heap사용법만 알면 크게 어려운 문제는 아니였다. list를 입력 받으면 가장 작은 수를 빼고 2개를 더한 뒤 더한 수를 다시 list에 넣어주면 된다. 그래서 난 가장 작은 수 2개를 빼기 위헤 heap을 사용했다. import heapq n,t= map(int,input().split()) heap = list(map(int,input().spl..
백준 11052 카드 구매하기 파이썬 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 카드를 구매하는데 최대한 많은 돈을 써야했던 문제이다. 카드를 각 n장 샀을때 최대값을 dp[n]에 저장해주는 dp배열을 만들었다. 그 후 2중 for문을 사용해 4개를 살때 dp[4]를 dp[3]+s[1] ,dp[2]+s[2],dp[1]+s[3],dp[4]+s[0]인(안의 숫자는 index가 아니라 구매한 카드 숫자의 개수이다.) 경우 중에서 가장 큰 값을 dp[4]로 저장해주면서 우리의 목표인 n장까..
백준 10814 나이순 정렬 파이썬 https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 핵심 키워드는 입력된 데이터를 잘 정제해 파이썬내에 sort를 적극적으로 활용하는 것이다. 나이가 같은 경우에 입력된 순서가 앞에 오는 것을 먼저 출력하니 [나이,[입력된 순서,이름]]이런 식으로 리스트를 만들어주면 나이가 같은 경우 입력된 순서가 작은 순서대로 정렬됨을 볼 수 있다. import sys #빠른 입력을 사용해주기 위한 import a =int(input()) s = [] for i in..
백준 18310 안테나 파이썬 https://www.acmicpc.net/problem/18310 18310번: 안테나 첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다. www.acmicpc.net 모든 집까지의 거리의 총 합이 최소가 되는 경우를 구하는 것인데 최소가 되는 경우는 모든 집을 일렬로 나열했을때 중간에 있는 집을 고르는 경우이다. 따라서 n이 홀수일때는 s[n//2]을 출력해주면 되고 n이 짝수일때는 s[n//2]와 s[n//2-1]에 안테나를 설치 했을 경우에 합이 최소가 되는데 더 작은 값을 출력하라고 했으니 s[n//2-1]을 출력해주면 된다. n =int(input()) s = list(map..
백준 1769 3의 배수 파이썬 https://www.acmicpc.net/problem/1769 1769번: 3의 배수 문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를 www.acmicpc.net 문제에 나온 지문대로 코드를 만들면 되는 쉬운 문제였다. 한가지 주의할점이 있다면 시간초과 관련이다. or 시간 줄이기 n = input() c=0 while int(n)>=10: t = 0 for i in range(len(n)): t+=int(n[i]) n=str(t) c+=1 print(c) if int(n)%3==0: print("YES") else: print('NO') 위에 코드는 Pytho..
백준 12891 DNA 비밀번호 파이썬 https://www.acmicpc.net/problem/12891 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 처음에는 문제를 주어진 문자열 속에서 P개의 문자를 뽑아 비밀번호를 만든다로 해석을 잘 못해 조합을써서 풀었더니 시간초과를 맛봤다. 그래서 왜 시간초과가 나는지 이해 못 했고 다른 사람들 풀이를 보니 문제가 부분 문자열 즉 이어진 문자만 가능하다는 것이였다.. 이 사실을 알고 문제 분류에 맞게 슬라이딩 윈도우 방법으로 풀어봤다. 코드 설명을 간단하게 하자면 우선 꼭 들어가야..