본문 바로가기

반응형

코딩테스트(python)/백준

(29)
백준 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 ..
백준 10757번 파이썬 1. 문제 2. 설명 a와 b를 입력받아 두 수의 합을 출력한다. a와 b의 입력은 map을 사용하여 받고 split해준다. 3. 코드 a, b = map(int, input().split()) print(a+b)
백준 2839번 파이썬 1. 문제 2. 설명 봉지의 최소 개수를 출력해야하므로, While 반복문을 사용하여 총 무게가 0kg보다 작거나 같을때까지 반복한다. 5로 나눠 0이 된다면 count에 5를 나눈 숫자를 더해주고, 나누어 떨어지지 않는다면 all에서 3을 빼고 count에 1을 더한다. 0으로 나누어 떨어지지 않을 시 -1을 출력한다. 3. 코드 all=int(input()) count = 0 while all >= 0: if all % 5 == 0: count += all // 5 print(count) break all -= 3 count += 1 else: print(-1) 오늘 문제는 접근 방식 자체를 생각해내지 못했다..ㅠㅠ 수학문제는 역시 어렵다! 분발하자..!
백준 2775번 파이썬 1. 문제 2.설명 이중 for문을 사용하는 방법까진 맞았는데... 알고리즘이 약간 잘못되어서 계속 틀렸다 ㅠㅠ 결국 정답을 보며 공부하기 시작했는데, 리스트 comprehension 방식은 처음이라 코드를 이해하는데에 꽤 오랜 시간을 들였다! f0 = [x for x in range(1, num+1) -> [1,2,3,4,5,6 ... num] 0번째 층에 대한 리스트로 1부터 num까지의 수가 리스트에 들어간다. fo[i] 값에 f0[i-1]과 자기자신을 더해주며 각 호실의 사람 수를 변경해준다. 예를 들어, floor가 2고 num이 3이라면 0층 [1,2,3] 1층 [1,3(1+2),3] -> [1,3,6(3+3)] 이 되어 1층 3호실에 해당하는 값인 6을 반환하게 된다. 3.코드 t = int..

반응형