본문 바로가기

반응형

코딩테스트(python)/백준

(29)
백준 2751번 파이썬 1. 문제 2. 설명 입력되는 수를 배열로 받아 sort()를 사용하여 정렬하였다. 다만, 2750번과의 차이점은 N이 1,000,000까지라는 것이다. 2750번처럼 int(input())로 입력을 받으면 타임아웃이 뜬다. 이때, import sys sys.stdin.readline()을 사용하여 문제를 풀어주었다. input() 이 sys.stdin.readline() 보다 느리다! input() 내장 함수는 prompt message를 출력하고, 개행 문자를 삭제한 값을 리턴하기 때문 input() 과 sys.stdin.readline() 의 차이 : 1. input() 내장 함수는 parameter로 prompt message를 받을 수 있다. 따라서 입력받기 전 prompt message를 출력..
백준 2750번 파이썬 1. 문제 2. 설명 입력되는 수를 배열로 받아 sort()를 사용하여 정렬하였다. 3. 코드 n = int(input()) a = [] for i in range (0,n): num = int(input()) a.append(num) a.sort() for j in range (0,len(a)): print(a[j])
백준 11829번 파이썬 1. 문제 2. 설명 알고리즘) n개의 원판이 있을때, n - 1개의 원판 즉, 맨 밑의 원판을 제외하고 나머지 원판들을 1번에서 2번으로 옮긴다. -> hanoi(n-1, a, c, b) 맨 밑의 원판을 1번에서 3번으로 옮긴다. -> print(a, c) 그리고 n - 1개의 원판들을 다시 2번에서 3번으로 옮긴다. -> hanoi(n-1, b, a, c) 최소한의 이동 값 규칙) n = 1일 때 1, n = 2일 때 3, n = 3일 때 7, n=4일 때 15 이므로 (2^n - 1)이라는 식이 나온다. 3. 코드 n = int(input()) def hanoi(n, a, b, c): if n == 1: print(a, c) else: hanoi(n-1, a, c, b) print(a, c) han..
백준 2447번 파이썬 1. 문제 2. 설명 이번 문제는 내가 접한 재귀 문제 중 가장 어려웠던 것 같다. 고민해봐도 해답이 보이지 않았고, 결국 정답을 찾아보기 시작했다. 코드를 이해하는데에도 시간을 좀 쏟았다..^^7 해당 블로그의 코드를 보며 이해하였다! https://lucian-blog.tistory.com/57 [백준 2447번] 별 찍기 - 10 in python 문제 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 lucian-blog.tistory.com 재귀 함수를 호출하면서 n이 1이 되면 ['*']가 리턴되므로, n이 3일 때 Stars = dra..
백준 17478번 파이썬 1. 문제 2. 설명 첫번째 차례에만 나오는 "어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다." 부분을 함수 호출 전에 출력해준다. 초기 i값을 0으로 두고 i를 하나씩 증가시키며 재귀함수를 불러온다. i가 마침내 n이 될때 "재귀함수는 자기 자신을 호출하는 함수라네" 를 출력해준 후, "____" * i +"라고 답변하였지." 를 순서대로 출력해준다. 이때 i는 1씩 줄어든다. 예를들어 n이 2일때, 2->1->0 순으로 i값이 줄어들게 된다. 3. 코드 def recursion(i, n): print("____"*i + '"재귀함수가 뭔가요?"') if i == n: print("____"*i + '"재귀함수는 자기 자신을 호출하는 함수라네"') else: print("____"*i + ..
백준 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문을 돌리니 따져야할 것이 많아져 타임아웃이 나왔던 것 같다.

반응형