본문 바로가기

반응형

코딩테스트(python)

(32)
백준 10870번 파이썬 1. 문제 2. 설명 이 문제도 앞 전 문제와 같은 재귀 함수를 사용하는 문제다. fib(num) = fib(num-1) + fib(num-2) 이므로 return 값을 해당 식을 사용하여 적어준다. num이 0, 1 일때는 각각 0, 1로 초기값을 지정해주어야한다. 만약 num이 0이면 0을 리턴한 후 종료한다. 3. 코드 def fib(num): if num == 1: return 1 elif num == 0: return 0 quit() return fib(num-1) + fib(num-2) num = int(input()) print(fib(num))
백준 10872번 파이썬 1. 문제 2. 설명 이번 문제는 재귀함수를 이용하는 문제다. 종료조건에 도달할 때까지 함수 자기자신을 반복적으로 호출한다. 팩토리얼은 num x (num-1) x num-2 ... x 1 이므로, num에 계속해서 factorial(num-1)을 곱해주면 된다. 10 x factorial(9) = 10 x 9 x factorial(8) = 10 x 9 x 8 x factorial(7) ... 이런식으로 num이 1일 때까지 반복된다. 만약 num이 1이라면 지금까지 곱했던 값에 1을 곱한후 (1이 return되기 때문) 종료된다. 만약 처음부터 num 값이 1이라면 1을 리턴한 후 종료된다. 3. 코드 def factorial(num): if num == 0: return 1 quit() return ..
백준 9020번 파이썬 1. 문제 2. 설명 역시나 이 문제도 타임아웃과의 싸움이였다. 1. 차이가 가장 적으려면 출발점을 반절 값에서 시작한다. 2. 반절값부터 한쪽은 1씩 줄어들고, 한쪽은 1씩 늘어나면서 그 값들이 소수인지 판별한다. 3. 코드 정답 코드 from sys import stdin T=int(stdin.readline()) def prime(number): if number 0: first = k; second = j break print(first,' ',second) 배열을 만들어주고 for문을 돌리니 따져야할 것이 많아져 타임아웃이 나왔던 것 같다.
백준 4938번 파이썬 1. 문제 2. 설명 역시나 while문 안에 for문을 넣으면 타임아웃이 뜬다. 아직까지 시간복잡도를 생각하며 코딩하는 것은 좀 어렵다 . 시간초과가 안뜨게 하기 위해 미리 소수를 판별하는 함수를 만든다. 문제에서 n이 2부터 123,456까지라고 주어져있으므로, 2부터 246,912(123,456 * 2)까지의 리스트를 만든다. for문으로 리스트 안에 있는 숫자들이 소수인지를 미리 걸러준 후 새로운 배열에 넣어준다. 3. 코드 정답 코드 import math def IsPrime(num): a = int(math.sqrt(num)) if num == 1: return False else: for i in range(2, a+1): if num % i == 0: return False return T..
백준 1929번 파이썬 1. 문제 2. 설명 시간복잡도를 줄여주기 위해, i의 제곱근까지만 검사해주는 방식을 사용했다. i를 2부터 i의 제곱근까지의 수로 나누어주며, 나누어진다면 cnt를 1 증가시킨 후 break한다. 만약 끝까지 어떤 수로도 나눠지지 않았다면(cnt=0) i값을 출력해준다. 3. 코드 import math m, n = map(int, input().split()) cnt=0 for i in range(m,n+1): if i==1: continue cnt=0 for j in range(2,int(math.sqrt(i))+1): if i%j==0: cnt+=1 break if cnt==0: print(i) 정말 오랜만에 정답 검색안하고 내가 오롯이 푼 코드로 '맞았습니다!' 를 받았다!! ㅠㅠ 까다로운 백준 ..
백준 11653번 파이썬 1. 문제 2. 설명 m을 2로 두고 나머지가 0일 때까지 최대한 나눈다. 만약 나머지가 0이 아니라면 m값에 1을 더하여 나누어준다. N 즉 몫이 1이 될 때까지 해당 작업을 반복한다. 3. 코드 N = int(input()) m = 2 while N!=1: #몫이 1이 되면 멈춤. if N%m==0: print(m) N = N//m else: m += 1 내가 작성한 코드 n=int(input()) a=[] while n>1: for i in range(2,n+1): cnt=0 for j in range(2,i): if i%j==0: cnt+=1 break if cnt==0: if n%i==0: a.append(i) n=n//i for k in a: a.sort() print(k) 역시나.. whil..
백준 2581번 파이썬 1. 문제 2. 설명 처음에은 두번째 for문의 if문에 break를 안써줘서 계속 타임아웃이 생겼다. 2부터 i 까지의 값으로 i를 나눠줄 때, 하나라도 나머지가 0 이 나오는 순간이 생기면 바로 break를 해주어 시간을 아껴준다. temp에 n의 값을 넣어준 후, for문을 돌며 소수인지 판별하다 소수가 나오면 temp 값과 비교해서 나온 소수 중 가장 작은 수를 출력할 수 있도록 한다. 3. 코드 m=int(input()) n=int(input()) sum=0;cnt=0;temp=n; for i in range(m,n+1): if i==1: continue cnt=0 for j in range(2,i): if i%j==0: cnt+=1 break if cnt==0: if temp>i: temp=i..
백준 1978번 파이썬 1. 문제 2. 설명 i가 1 이면 continue한다. 그 외에는 for문을 사용하여 2부터 i까지 나눠보며 나머지가 0이면 check 값을 증가시킨다. 최종적으로 그 어떤 숫자로도 나누어지지 않았다면 check가 0이되어 count값에 1을 증가시켜 소수의 갯수를 체크한다. 3. 코드 n = int(input()) data = list(map(int, input().split())) count = 0 for i in data : check = 0 if i == 1 : continue for j in range(2, i) : if i % j == 0 : check = 1 if check == 0 : count += 1 print(count) 내가 작성한 코드 n=int(input()) num_list ..

반응형