본문 바로가기
반응형

Python51

[백준] 2751번 : 수 정렬하기 2 유형 : 정렬 [예제] 5 5 4 3 2 1 [출력] 1 2 3 4 5 1. 내 풀이 import sys N = int(sys.stdin.readline()) _list = [] for _ in range(N): _list.append(int(sys.stdin.readline())) _list.sort() for data in _list: print(data) ▷ 기본 정렬 라이브러리(sort())를 이용해 쉽게 구할 수 있었다. ▷ input()을 쓰면 시간초과가 나오길래 sys.stdin.readline()으로 수정하였다. ▶ input() 함수의 경우 prompt message를 출력하고 개행 문자(\n)를 삭제한 값을 리턴해서 느리다고 한다. ▶ 참고 : [Python] Input vs. sys... 2022. 1. 3.
[백준] 7490번 : 0 만들기 ☆ 유형 : 재귀 [예제] 2 3 7 [출력] 1+2-3 1+2-3+4-5-6+7 1+2-3-4+5+6-7 1-2 3+4+5+6+7 1-2 3-4 5+6 7 1-2+3+4-5+6-7 1-2-3-4-5+6+7 1. 풀이 ** 핵심 아이디어 1. 자연수 N의 범위(3≤N≤9)가 매우 한정적이므로 완전 탐색으로 문제 해결 가능 2. 수의 리스트와 연산자 리스트를 분리하여 모든 경우의 수 계산 3. 가능한 모든 경우를 고려하여 연산자 리스트를 만드는 것이 관건(재귀 함수 이용) ex. N = 3 [[' ', ' '], [' ', '+'], [' ', '-'], ['+', ' '], ['+', '+'], ['+', '-'], ['-', ' '], ['-', '+'], ['-', '-']] 4. 파이썬의 eval() .. 2022. 1. 1.
[백준] 1074번 : Z ☆ 유형 : 재귀함수 [예제] 2 3 1 [출력] 11 1. 풀이 출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 패키지 Online ** 핵심 아이디어 1. Z 모양을 구성하는 4가지 방향에 대하여 차례대로 재귀적으로 호출 def solve(n,x,y): global result if n == 2: # 2*2인 경우 if x == X and y == Y: # 아래 그림에서 1번 print(result) return result += 1 if x == X and y + 1 == Y: # 아래 그림에서 2번 print(result) return result += 1 if x + 1 == X and y == Y: # 아래 그림에서 3번 print(result) return result += 1 if x.. 2022. 1. 1.
[백준] 2747번 : 피보나치 수 유형 : 재귀 함수 [예제] 10 [출력] 55 1. 내 풀이 n = int(input()) _list = [0,1] for i in range(n): _list.append(_list[i]+_list[i+1]) print(_list[n]) ▷ 피보나치 수의 식인 Fn = Fn-1 + Fn-2 (n ≥ 2)을 이용해서 풀었다. ▷ 처음 두 수 0,1을 리스트에 받고, 이 리스트를 이용하였다. ▷ 문제에서 전체 배열이 아니라 n번째 피보나치 수를 출력하라고 했으니, 굳이 append로 할 필요는 없어 보인다. 2. 다른 풀이 출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 올인원 패키지 Online ** 핵심 아이디어 1. 피보나치 수열의 점화식을 세움 F0 = 0, F1 = 1 Fn = Fn-1.. 2022. 1. 1.
[백준] 10989번 : 수 정렬하기 3 유형 : 정렬 [예제] 10 5 2 3 1 4 2 3 5 1 7 [출력] 1 1 2 2 3 3 4 5 5 7 1. 내 풀이(틀림) 더보기 N = int(input()) num_list = [] for _ in range(N): tmp = int(input()) num_list.append(tmp) num_list = sorted(num_list) for i in range(N): print(num_list[i]) ▷ 메모리 초과로 실패 ▷ 기본 정렬 라이브러리로는 안 되는 듯 하다. ▷ 반복문 안에 append를 썼기 때문에 메모리 재할당이 일어나 속도 저하와 비효율적인 메모리 사용이 발생한다. (출처) ▷ FAQ : https://www.acmicpc.net/board/view/26132 모든 입력을 .. 2022. 1. 1.
[백준] 11650번 : 좌표 정렬하기 유형 : 정렬 [예제] 5 3 4 1 1 1 -1 2 2 3 3 [출력] 1 -1 1 1 2 2 3 3 3 4 1. 내 풀이 N = int(input()) num_list = [] for i in range(N): num1, num2 = input().split(' ') num1 = int(num1) num2 = int(num2) num_list.append([]) num_list[i].append(num1) num_list[i].append(num2) num_list = sorted(num_list) for i in range(N): print(num_list[i][0],num_list[i][1]) ▷ 2차원 리스트로 만드는 게 핵심이다. ▷ x좌표, y좌표를 하나의 리스트에 담고, 기본 정렬 라이브러.. 2021. 12. 31.
반응형