본문 바로가기

백준 파이썬 코딩

(49)
백준 18290 NM과 K (1) 파이썬 https://www.acmicpc.net/problem/18290 18290번: NM과 K (1) 크기가 N×M인 격자판의 각 칸에 정수가 하나씩 들어있다. 이 격자판에서 칸 K개를 선택할 것이고, 선택한 칸에 들어있는 수를 모두 더한 값의 최댓값을 구하려고 한다. 단, 선택한 두 칸이 인접 www.acmicpc.net 백트레킹 문제였다. 주의할점이 있다면 이전에 방문처리했던 vist배열을 이후에 방문처리하고 다시 원상복구할때 이전 방문처리했던 배열까지 바꿔버리는 부분을 조심해주면 된다. 또한 배열 숫자의 크기가 음수도 있으므로 최댓값을 0으로 설정해주면 안 된다. import sys input = sys.stdin.readline def back(t,x,y,c): global sums,vist if ..
백준 2822 점수 계산 파이썬 https://www.acmicpc.net/problem/2822 2822번: 점수 계산 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문 www.acmicpc.net 입력을 받을때 몇번째로 입력을 받았는지와 점수의 크기가 매칭이 되어있는 리스트를 만드는 것이 핵심이였다. s = [(int(input()),i) for i in range(1,9)]#몇번째로 입력받았는지 알아야하니 입력받는 순서도 저장해줌 s.sort(reverse=True)#내림차순 정렬 d=[] sums=0 for i in range(5):#5번째까지만 구하는거니까 range(5) d...
백준 20115 에너지 드링크 파이썬 https://www.acmicpc.net/problem/20115 20115번: 에너지 드링크 페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다. 야근을 마치고 한 www.acmicpc.net 처음에는 b = a(제일 작은값/2) + b(제일 큰값) 해주면 된다고 생각해 whlie 문을 사용해 매번 sort를 하고 배열[0]과 배열[-1]을 계속더해줘 배열의 길이가 1일때 whlie문이 종료되게 해줬다. n=int(input())#O(NlogN) s = list(map(int,input().split())) while len(s)!=1: s.sort() a = s.pop() s[0] =..
백준 3015 오아시스 재결합 파이썬 반례 설명 및 테스트케이스 공유 https://www.acmicpc.net/problem/3015 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231 나노미터 보다 작다. 사람 www.acmicpc.net 입력받은 배열 1개, stack배열 1개를 만들어서 풀었다. 원래 같은 숫자도 stack배열에 넣어줬는데 시간 초과가 나서 2중리스트 형태로 만들고 바로 다음이 중복되면 stack[1]+=1 해주는 형식으로 했다. (코드 보면 한번에 이해 가능) [숫자,중복된 횟수] from collections import deque import sys input=sys.stdin.rea..
백준 19637 IF문 좀 대신 써줘 파이썬 (시간초과 해결) https://www.acmicpc.net/problem/19637 19637번: IF문 좀 대신 써줘 첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭 www.acmicpc.net 처음에는 아래와 같이 입력받은 숫자보다 큰수가 나오면 멈추게 완전 탐색 방법으로 구현을 했었다. import sys input=sys.stdin.readline n,m=map(int,input().split()) s=[] for _ in range(n): a,b=input().split() b = int(b) s.append((a,b)) for _ in ..
백준 14620 꽃길 파이썬 https://www.acmicpc.net/problem/14620 14620번: 꽃길 2017년 4월 5일 식목일을 맞이한 진아는 나무를 심는 대신 하이테크관 앞 화단에 꽃을 심어 등교할 때 마다 꽃길을 걷고 싶었다. 진아가 가진 꽃의 씨앗은 꽃을 심고나면 정확히 1년후에 꽃이 피므 www.acmicpc.net 백트레킹을 알고 있으면 쉽게 풀 수 있는 문제였다. 아래는 코드와 코드설명을 적어놨다. def ch(i,j,mit,d): cs=0#크기를 저장해줄 변수 for k in range(5): nx=dx[k]+i ny=dy[k]+j if 0
백준 16235 나무 재테크 파이썬 https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 재미있는 구현 문제였다. 하지만 파이썬에서는 시간제안이 좀 빡빡했던거 같다. 원래 봄, 여름, 가을, 겨울을 따로 구현했었고 가을에 나무를 추가할때 sort를 썼다. 시간초과가 나서 봄 + 여름을 합치고 제출했는데 또 43%부분에서 시간초과가 났다, 마지막으로 deque를 사용해 작은것 부터 양분을 먹을 수 있게 sort부분은 appendleft(1)로 고쳐주니 겨우 통과했다. i..
백준 1010 다리놓기 파이썬 https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 꼬이지 않게 다리를 배치하기 위해서 조합을 사용하는 되는 문제였다. from itertools import combinations n,m = map(int,input().split()) n,m = min(n,m),max(n,m) s=list(combinations([i for i in range(m)], n)) print(len(s)) 위와 같은 방법으로 조합을 만들어서 계산하게 되면 시간초과가 ..