728x90
반응형

파이썬 69

[Baekjoon 1629 / python / 실버1] 곱셈

def dac(a, b, c): # a^b % c if b == 1: return a % c elif b % 2 == 0: # b가 짝수일 때 return (dac(a, b//2, c)**2) % c else: return ((dac(a, b//2, c)**2)*a) % c a, b, c = map(int, input().split()) print(dac(a, b, c)) 분할 정복 알고리즘이 사용되며, (a ^ b) % c 의 결과를 출력하기만 하면 되는 문제이다. 그러나 주어지는 입력값이 int의 최대값인 21억 정도로 매우매우 크다. 시간 제한도 0.5초로 매우 짧기 때문에 일반적인 연산으로는 시간 초과가 뜬다. 때문에 수학 공식을 이용하여 작은 단위로 분할하여 연산 횟수를 줄여서 계산해야 한다. ..

Algorithm/Math 2024.03.27

[Baekjoon 2630 / python / 실버2] 색종이 만들기

import sys n = int(sys.stdin.readline()) # 종이 길이 paper = [list(map(int, sys.stdin.readline().split())) for _ in range(n)] # 종이와 색깔 result = [] # 결과를 담을 변수 def cut(x, y, n): # 행, 열 시작지점과 종이 길이를 입력받는다 color = paper[x][y] # 종이 색깔 비교를 위한 색깔 저장 for i in range(x, x + n): for j in range(y, y + n): if color != paper[i][j]: # 다른 색깔이 존재할 경우 종이를 4등분한다 cut(x, y, n//2) cut(x+n//2, y, n//2) cut(x, y+n//2, n//..

[Baekjoon 11279 / python / 실버2] 최대 힙

import heapq as hq import sys n = int(input()) hqq = [] for _ in range(n): x = int(sys.stdin.readline()) if x >= 1: hq.heappush(hqq, -x) # hq는 최소힙만 지원하기 때문에, 최대힙 처럼 사용하기 위해 음수로 저장 else: # 음수로 저장하면 -가 붙으니, 가장 큰 값이 가장 위로 가게 된다 if len(hqq) == 0: print(0) else: print(abs(hq.heappop(hqq))) # 값을 꺼낼 땐 절댓값을 이용해 양수로 만든다 우선순위 큐가 사용된 문제다. 최대 힙으로 우선순위 큐를 구현하여 문제를 해결할 수 있다. 스택, 큐 문제처럼 문제 자체는 어렵지 않으나, 힙이라는 자료..

[Baekjoon 2309 / python / 브론즈1] 일곱 난쟁이

hobit = [] # 난쟁이 리스트 for _ in range(9): # 9명 입력받음 hobit.append(int(input())) kee = sum(hobit) # 9명 난쟁이 키의 합을 구해둔다 def hobit7(hobit): for i in range(len(hobit)-1): # 난쟁이 2명을 선택하는 모든 경우의 수 인덱스를 구해서 반복한다 for j in range(len(hobit)): if j > i: if kee - (hobit[i] + hobit[j]) == 100: # 난쟁이 2명을 뺀 키가 100 이라면 정답 a = hobit[i] b = hobit[j] hobit.remove(a) # 난쟁이 삭제 hobit.remove(b) hobit.sort() # 정렬 for i in ..

[Baekjoon 9663 / python / 골드4] N-Queen

n = int(input()) pos = [0] * n # 퀸 위치 담을 리스트 flag_heng = [False] * n # 행 배제 flag_a = [False] * ((n-1) * 2 + 1) # 우상향 대각 배제 flag_b = [False] * ((n-1) * 2 + 1) # 좌상향 대각 배제 count = 0 # 경우의 수 def set(i): global count for j in range(n): if not flag_heng[j] and not flag_a[i + j] and not flag_b[(n-1) + i - j]: # 행 , 대각, 대각 안전할 때 pos[i] = j # i번째 열의 j번째 행에 퀸을 둔다 if i == n - 1: # 마지막 열까지 n개의 퀸을 뒀을 때, 즉 경..

[Baekjoon 10872 / python / 브론즈3] 팩토리얼

def factorial(n): if n > 0: return n * (factorial(n - 1)) else: return 1 n = int(input()) print(factorial(n)) 팩토리얼은 n! 으로 표기하며, 1부터 n까지의 수를 곱하면 된다. 팩토리얼은 재귀함수로 표현할 수 있으며, 재귀함수는 자기 자신과 똑같은 함수를 호출하는 함수이다. 물론 팩토리얼의 구현은 재귀함수로 하지 않는 게 더 효율적이지만, 팩토리얼이 재귀함수를 호출할 때 사용되는 대표적인 예이기 때문에 재귀함수로 구현하였다.

Algorithm/Recursion 2024.03.22

[프로그래머스 / Python] 배열 회전시키기

def solution(numbers, direction) : if direction == 'right' : temp = numbers[-1] numbers[1:] = numbers[0:-1] numbers[0] = temp else : temp = numbers[0] numbers[0:-1] = numbers[1:] numbers[-1] = temp return numbers 정답 코드 'right'일 경우, 소실될 맨 마지막 요소[-1]를 temp 변수에 저장해둔 후 모든 요소를 오른쪽으로 밀어준다. 그리고 저장해둔 temp 값을 [0] 위치에 할당한다. 'left'는 right와 반대로 실시한다.

[프로그래머스 / Python] 주사위 게임 3

def solution(a, b, c, d) : origin = [a,b,c,d] so = list(set(origin)) if len(so) == 1 : # 4개 전부 같을 때 return origin[0] * 1111 elif len(so) == 2 : # 3개가 같거나, 2개/2개 같을 때 for i in origin : if origin.count(i) == 3 : p = i q = [x for x in origin if x != p][0] return (10 * p + q) ** 2 elif origin.count(i) == 2 : p = i q = [x for x in origin if x != p][0] return (p + q) * abs(p - q) elif len(so) == 3 : #..

728x90
반응형