본문 바로가기

분류 전체보기308

[백준 10989번] 수 정렬하기 3 - sort X 당연하게도 sort를 사용하면 메모리를 많이 먹는다는걸 모르고 문제 풀이를 시작했기 때문에 list에 입력받아 sort를 해 출력하는 코드를 먼저 짰다. ( 짜면서 이건 너무 쉬운데?? 라는 생각은 당연히 들었고... 답도 당연히 아닐것 같긴 했다.. ) 채점 결과 역시 틀리게 되었고 구글링 결과 생각한대로 sort가 메모리를 많이 잡아먹는것이 문제였다. -- 내가 짠 코드 # sort 사용시 메모리가 초과된다 import sys n = int(sys.stdin.readline()) a = [0] * 10000 # 10000보다 작은 수 for i in range(n): a[int(sys.stdin.readline())-1] +=1 for i in range(len(a)): if a[i] > 0: for.. 2022. 1. 4.
[백준 2775번] 부녀회장이 될테야 생각보다 코드를 짜는데 시간이 걸렸던 문제였다. 과거 java로 풀었었던 문제와 비슷하다고 생각해 하나의 리스트를 두고 누적해서 바꿔주면 되겠다고 생각했는데 반복문을 중첩해서 사용하다보니 머리에 무리가 간듯하다. - 제출 코드 T = int(input()) k = [] n = [] floor = [] for i in range(T): k.append(int(input())) n.append(int(input())) floor.append([j for j in range(1,n[i]+1)]) # 0층 리스트 for i in range(T): for _ in range(k[i]): for j in range(len(floor[i])): if j==0: floor[i][j] = 1 else: floor[i][.. 2022. 1. 2.
[백준 1929번] 소수 구하기 - 에라토스테네스의 체 - 제출 코드 import math import sys m, n = map(int, sys.stdin.readline().split()) def is_prime(x): if x==1: return False for i in range(2,int(math.sqrt(x)+1)): if x%i == 0: return False return True while m 뒤에 있는 해당 수의 배수들을 지워준다 check_list = [False]+[False] + [True] * (n-1) for i in range(2,n+1): if check_list[i]==True: # 살아있으면 소수 -> 배수들을 지워주겠다 for j in range(i*2, n+1, i): check_list[j] = False return.. 2022. 1. 2.
[백준 2609번] 최대공약수/최소공배수 - 유클리드 호제법 - 짠 코드 def gcd(x, y): min1 = min([x, y]) max1 = max([x, y]) while min1 != 0: max1, min1 = min1, max1 % min1 return max1 # 최소공배수 def lcm(x, y): return x * y // gcd(x, y) a, b = map(int, input().split()) print(gcd(a,b)) print(lcm(a,b)) # 재귀과정으로 만들면 저절로 큰값이 x, 작은값이 y로 가도록 만들 수 있다. - 최대공약수 : 두가지 수가 주어졌을 때 더이상 공약수가 없을 때까지 공약수로 나눠가며 지금까지 나눈 공약수들을 곱해주면 최대공약수가 된다. 유클리드 호제법 : 두 양의 정수 a,b (a > b)에 대하여 a =.. 2022. 1. 1.
[백준 1874번] 스택 알고리즘 - 먼저 혼자짜본 코드 import sys n = int(sys.stdin.readline()) suyeol = [int(sys.stdin.readline()) for _ in range(n)] answer = [] if sorted(suyeol[suyeol.index(max(suyeol)):],reverse=True)==\ suyeol[suyeol.index(max(suyeol)):]: for i in range(1, n + 1): answer.append(i) print('+') while answer[-1] == suyeol[0]: print('-') answer.pop() suyeol.pop(0) if len(answer)==0: break else: print(.. 2022. 1. 1.
[백준 1654번] 이분탐색 ( Binary Search) - 처음 짠 코드 import sys k, n = map(int,sys.stdin.readline().split()) lansun = [] for i in range(k): lansun.append(int(sys.stdin.readline())) count = max(lansun) while True: a = 0 for i in range(k): a += lansun[i] // count if a>=n: break else: count -= 1 print(count) 처음에는 lansun리스트에서 min을 골라 1씩 빼가며 내려가면 원하는 값을 찾을 수 있을거라 생각했다. -> 시간초과 -> input을 sys.stdin.readline()으로 바꾸고 list comprehension으로 만들어 보기도 .. 2021. 12. 31.