본문 바로가기

분류 전체보기

(237)
백준 2630 색종이 만들기 - 파이썬 풀이. 분할정복 알고리즘을 사용해야한다. 전체를 검사하고 나서 조건에 맞지 않는다면 4분면으로 분할하여 제일 작은 부분까지 체크를 하는방식이다. 소스코드. import sys def div_con(x, y, n): global blue, white, paper color = paper[x][y] check = 0 for i in range(x, x+n): if check != 0: break for j in range(y, y+n): if color != paper[i][j]: div_con(x, y, n//2) # 2사분면 div_con(x, y+(n//2), n//2) # 1사분면 div_con(x+(n//2), y , n // 2 ) # 3사분면 div_con(x+(n//2), y+(n//2), n..
백준 11286 절대값 힙 - 파이썬 풀이. 최대 힙을 응용하여서 튜플형식에 (abs(n), n)으로 절대값을 삽입해준다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n != 0: heapq.heappush(queue, (abs(n), n)) elif n == 0: try: print(heapq.heappop(queue)[1]) except: print(0)
백준 1927 최소 힙 - 파이썬 풀이. 파이썬에서 제공하는 heapq 라이브러리를 이용하면 매우 간단하게 풀 수 있다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n >= 1: heapq.heappush(queue, n) elif n == 0: try: print(heapq.heappop(queue)) except: print(0)
백준 11279 최대힙 - 파이썬 풀이. 파이썬의 heapq 라이브러리를 사용했는데 heapq라이브러리는 기본적으로 최소힙이다. 즉 최대힙을 사용하려면 heappush를 할때 (-n, n)의 튜플 형태로 넣어서 문제를 풀어야한다. 소스코드. import sys import heapq N = int(sys.stdin.readline()) queue = [] for i in range(N): n = int(sys.stdin.readline()) if n >= 1: heapq.heappush(queue, (-n, n)) elif n == 0: try: print(heapq.heappop(queue)[1]) except: print(0)
백준 14888 연산자 끼워넣기 - 파이썬 풀이. itertools의 permutations를 이용해 모든 경우의 수를 만들어놓고 풀이를 하였다. 처음에는 실패하였는데 알고보니 permutations의 경우에는 같은 값 이더라도 원소의 순서가 다르면 다른 경우로 간주하여서 중복되는 경우가 매우 많다 그리하여 set을 이용하여 중복되는 값을 제거하여 문제를 풀어서 통과했다. 소스코드. import sys import itertools N = int(sys.stdin.readline()) number = list(map(int, sys.stdin.readline().split())) operator = list(map(int, sys.stdin.readline().split())) op = '' op += '+' * operator[0] op += ..
백준 14889 스타트와 링크 - 파이썬 풀이. 파이썬의 내장 라이브러리 itertools의 combinaition으로 조합을 구하여서 쉽게 해결할 수 있다. 또한 주의 하여야할 점이 팀에 구성멤버가 3명이상 넘어가면 각각의 멤버들의 조합에 대한 능력치들을 모두 구하여서 더해주어야한다. 소스코드. import sys import itertools def calc(comb, stats): # start팀과 link 팀 나누기 start = comb[0:len(comb)//2] link = comb[len(comb)//2:] link.reverse() result = 10000 for s, l in zip(start, link): sc = itertools.combinations(s, 2) lc = itertools.combinations(l, 2..
백준 13305 주유소 - 파이썬 풀이. 제일 처음 위치를 check에 두고 그 다음 위치와 리터당 가격을 비교하여 더욱 싼 곳을 check위치에 저장을 하여 매 단계마다 거리 * check위치의 리터당 가격을 하여 더해준다. 개인적으로 문제가 길어서 어려울것이라 생각했지만 좀만 생각해보니 엄청 쉬운 문제였다. 소스코드. import sys N = int(sys.stdin.readline()) distance = list(map(int, sys.stdin.readline().split())) price = list(map(int, sys.stdin.readline().split())) result = 0 check = 0 # for i in range(1, len(price)): if price[check] < price[i]: resu..
백준 1541 잃어버린 괄호 - 파이썬 풀이. 입력받을때 -로 구분받아서 입력을 받는다. 그리고 나누어서 구분받은 값들을 전부 계산을 한 다음에 리스트 첫번째 값에다가 나머지 값들을 전부 빼주면 해결된다. 소스코드. numerical = input().split('-') num = [] for i in numerical: n = i.split('+') result = 0 for j in n: result += int(j) num.append(result) result = num[0] for i in range(1, len(num)): result -= num[i] print(result)