본문 바로가기

백준7

[백준] 1095번 파이썬 - 마법의 구슬 s+f개의 구슬 중 s개를 뽑는 조합의 개수를 구하고그 개수를 m이하의 사람들에게 모두 같은 개수로 나누어 주면 되는데이 때 m의 값이 최대여야 한다.첫 번째 코드# 1,000,000,000범위 -> 시간복잡도 O(N)import maths,f,m = map(int,input().split())answer = -1# 1. s+f개로 만들 수 있는 조합의 개수 구하기 -> math.comb 시간복잡도 O(logn)combs = math.comb(s+f,s)# 2. m 이하의 사람들이 모두 같은 개수의 조합을 테스트 할 수 있도록 나누기if combs 시간초과  두 번째 코드# 1,000,000,000범위 -> 시간복잡도 O(N)import sysimport mathinput = sys.stdin.readl.. 2024. 5. 10.
[백준] 24092번 파이썬 - 퀵 정렬 3 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, j=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5(i=0, j=1) -> 2 1 3 4 5(i=0, j=2, A[1]" data-og-host="www.acmicpc.net" data-og-source-url="https://www.acmicpc.net/problem/24092" data-og-url="https://www.acmicpc.net/problem/24092" data-og-image=""> 24092번: 알고리즘 수업 - 퀵 정렬 32 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) ->.. 2024. 4. 4.
[백준] 24090번 파이썬 - 퀵 정렬 1 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, j=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5(i=0, j=1) -> 2 1 3 4 5(i=0, j=2, A[1]과 A[2]가" data-og-title="24090번: 알고리즘 수업 - 퀵 정렬 1" data-og-type="website" data-ke-align="alignCenter" data-ke-type="opengraph"> 24090번: 알고리즘 수업 - 퀵 정렬 12 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) -> 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i.. 2024. 4. 4.
[백준] 17406번 파이썬 - 배열 돌리기 4 배열이 주어지고 시계 방향으로 회전 시킬 범위 r,c,s가 주어진다.주어진 범위대로 배열을 돌리면 되는데, 회전 연산들의 순서에 따라 배열 A의 크기가 달라진다. 나는 배열 A의 크기를 구하는 countLine 함수와주어진 범위대로 배열을 회전시키는 rotateArray 함수를 만들어 주었다.(배열을 회전 시키는 것은 배열 돌리기 문제 1,2,3 을 통해 해보아서 비교적 쉽게 구현할 수 있었다.) 회전 연산의 순서를 섞어 배열 A의 최솟값을 구하는 것에서 많이 고민했는데 문제의 범위 제한은 다음과 같았다.K의 범위가 최대 6이기 때문에 permutations를 써도 될 것 같았고 (permutations의 시간 복잡도는 n!/r!)permu라는 리스트에 순열 값을 저장하여 최솟값을 계산하였다. 제출후 결.. 2024. 4. 3.
[백준] 16927번 파이썬 - 배열 돌리기 2 16927번: 배열 돌리기 2크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]www.acmicpc.net 16926 번 문제에서 회전 횟수의 범위가 1 로 늘어난 문제이다. 회전 횟수를 줄이기 위해 배열이 몇 번 회전했을 때 현재 배열과 똑같아 지는지 고민해보았고,2*(n-1) + 2*(m-1)이와 같은 사이클이 지날 때 마다 배열의 겉 둘레가 처음 배열과 같아지는 것을 확인했다. for문의 회전 범위를 R % cycle로 줄이고 제출해보니 틀렸다.. 왜?16926번 문제에서 .. 2024. 4. 2.
[백준] 16926번 파이썬 - 배열 돌리기 1 첫번째 풀이2 ≤ N, M ≤ 3001 ≤ R ≤ 1,000min(N, M) mod 2 = 01 ≤ Aij ≤ 108 사실 문제 제한이 다음과 같아서 풀면서도 아.. 시간 초과 날 것 같은데 라는 생각을 하긴 했다.내 풀이대로라면 r * min(n,m) // 2 * (각 for문에서 돌아가는 while 문의 수) 만큼 계산하는데대충 계산해보아도 시간 제한 1초가 넘어가게 생겼다.진작 풀이 갈아엎을껄.. 혹시나 해서 짰는데 역시나 시간초과 문제가 생겼다. n,m,r = map(int,input().split())array = []# 하우상좌dx = [1,0,-1,0]dy = [0,1,0,-1]for _ in range(n): array.append(list(map(int,input().split()).. 2024. 3. 29.
[백준] 12933번 파이썬 - 오리문제 오리의 울음 소리가 주여지면, 몇 마리의 오리가 소리를 낸건지 최소 수를 구하는 문제이다.quqacukqauackck 첫번째 오리는 "qu_ac_k_q_uack__"두 번째 오리는 "__q__u__a____ck" 첫번째 풀이시간 초과가 난 첫 번째 코드오리 한마리당 문자열을 처음부터 끝까지 돌면서 quack를 찾는 방식으로 풀었다.dfs 방법을 사용하여 시간초과가 난 것 같다. str = list(input())duck = ["q","u","a","c","k"]if len(str) % 5 != 0: print(-1) exit()def countDuck(n_str,str): idx = 0 new_str = [] if len(str) = 5: if len(str)== 5 an.. 2024. 3. 28.