파이썬 47

[프로그래머스 python] 가장 많이 받은 선물

https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  처음 든 생각- 일단 주어진 입출력의 풀이를 보면 두 개의 표가 등장한다. 이걸 어떻게 활용할 수 있을까?- 첫번째 표는 유저의 수만큼의 정사각 행렬이다. -> 이차원 행렬로 나타내야겠다- 두번째 표는 선물지수를 구하는 건데 준 선물의 총합과 받은 선물의 총합은 위의 이차원 행렬의 가로합과 세로합으로 구하면 된다.- 비교의 순서는 주고받은 선물의 개수 확인 -> 똑같다면 선물 지수 확인 나의 답d..

백준 2839 - 설탕 배달

처음 든 생각 - 브루트 포스해도 시간 복잡도가 괜찮을까? -> 최대 50000이니깐 O(N)으로 한쪽으로만 탐색을 다 하면 충분하겠네 나의 답 import sys input = sys.stdin.readline N = int(input()) three = N // 3 five = 0 isPossible = False result = 10000000 while three >=0: if (N - (three * 3)) % 5 == 0: five = (N - (three * 3)) // 5 result = min(result, three + five) isPossible = True three -= 1 if isPossible: print(result) else: print(-1) 사용될 3의 개수의 최댓값..

백준 1018 - 체스판 다시 칠하기

처음 든 생각 - 8*8 이라는 체스판의 크기를 일정하므로 시작점에 대한 좌표를 기준으로 가로 8개, 세로 8개를 세면 되겠다. - 다시 칠해야하는 개수는 정답 후보군이 2개 밖에 없으므로 정답을 하드코딩하여 비교해준다. 나의 답 import sys input= sys.stdin.readline N, M = map(int,input().split()) ans1 = [ ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B', 'W', 'B', 'W'], ['W', 'B', 'W', 'B', 'W', 'B', 'W', 'B'], ['B', 'W', 'B', 'W', 'B..

백준 19532 - 수학은 비대면강의입니다

처음 든 생각 - 연립 방정식을 해결했던 과정을 하나씩 복기해보자 1. x또는 y의 계수를 최소공배수로 맞춰준다 2. 두 개의 식을 빼서 x 또는 y를 구한다 3. 구한 하나의 변수를 기준으로 계산하여 나머지 변수의 값을 찾는다. - 최소공배수는 (두 수의 곱) / (두 수의 최대 공약수) 로 구할 수 있다. math.gcd를 사용하자. 나의 답 import sys, math input= sys.stdin.readline a,b,c,d,e,f = map(int,input().split()) if a == 0: y = c // b x = (f-e*y) // d print(x,y,sep=' ') elif d == 0: y = f // e x = (c-b*y) // a print(x,y,sep=' ') eli..

백준 14889 - 스타트와 링크

처음 든 생각 - 조합을 백트래킹으로 구현해서 팀을 만든 다음, 나머지 팀도 구해서 각각의 능력치를 비교해주면 되겠다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [] for _ in range(N): arr.append(list(map(int, input().split()))) result= 10000 t1 = [] def f(p): if len(t1) == N//2: global result t2 = [j for j in range(N) if j not in t1] sum1 = 0 for k in t1: for l in t1: sum1 += arr[k][l] for m in t2: for n in t2: sum1 -= arr[..

백준 14888 - 연산자 끼워넣기

처음 든 생각 - 연산자를 하나씩 다 끼워넣어서 확인해도 될까? -> 피연산자가 최대 11개 이므로 연산자는 10개 사용 가능 즉, 10! 가지의 경우의 수가 최대이므로 완전 탐색해도 되겠다. - 그 다음은 백트래킹해가면서 모든 연산을 재귀적으로 수행하면 되겠다 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split())) operators_list = list(map(int,input().split())) max_value = -10000000000 min_value = 10000000000 def search(idx, operators,result): if idx == N: global m..

백준 1629 - 곱셈

처음 든 생각 - 일단 A, B, C 범위가 심상치가 않네 이건 뭔가가 숨겨져 있다. 그래서 구글링을 좀 해서 풀었다. 나의 답 import sys input = sys.stdin.readline A,B,C = map(int,input().split()) def p(n): if n==1: return A % C else: tmp = p(n//2) if n%2 == 0: return tmp*tmp % C else: return tmp* tmp * A % C print(p(B)) 먼저 코드 설명에 분할 정복을 이용한 거듭제곱 알고리즘 부터 살펴보자. https://hbj0209.tistory.com/43 [Algorithm] 분할정복을 이용한 거듭제곱 # 분할정복을 이용한 거듭제곱 - C**n연산은 x를 n..

백준 1780 - 종이의 개수

처음 든 생각 - 어제 한 쿼드트리랑 구조가 아예 똑같고 나누는 숫자만 다르네 - 0,1,-1로 다 차있는지 아닌지 비교해서 아니면 분할해서 다시 검색하는 방식으로 재귀를 구성하면 되겠다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [list(input().split()) for _ in range(N) ] zero = 0 one = 0 minus = 0 def nine_tree(x,y,n): global zero, one, minus total = 0 start = arr[x][y] for i in range(x,x+n): for j in range(y,y+n): if start != arr[i][j]: total = float..

백준 1992 - 쿼드트리

처음 든 생각 - 아까 복습한 색종이 만들기 문제랑 완전 판박이네 - 4개로 분할할 때에 추가적으로 괄호가 들어가야하네 - 모두 0/1일 때 결과를 리턴함으로서 재귀 리턴 조건을 맞춰주고 - 4개로 분할할 경우 괄호를 포함한 재귀함수를 리턴해야겠다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [list(input()) for _ in range(N) ] def search(x,y,n): zero_count = 0 for i in range(n): for j in range(n): if arr[x+i][y+j] == "0": zero_count += 1 if zero_count == n*n: return "0" elif zero_c..

백준 2630 - 색종이 만들기

처음 든 생각 - 정사각형이 성립하는지 안하는지 판단한 다음 - 정사각형이 만들어지지 않는다면 다시 4개로 쪼개서 확인한다. - 크기가 1인 정사각형일 때가 재귀 탈출 조건일 것이다. 나의 답 import sys input = sys.stdin.readline N = int(input()) arr = [] for _ in range(N): arr.append(list(map(int,input().split()))) blue = 0 white = 0 # 사각형 별 시작 좌표 + 크기 를 받아서 def search(sr, sc, n): global blue, white # 1의 갯수를 센다 blue_count = 0 for i in range(sr,sr + n): for j in range(sc,sc+n):..

728x90