본문 바로가기
반응형

Python61

ImportError: attempted relative import with no known parent package 파이썬 할 때 마다 매번 마주치는 에러. 1. 원인 파이썬은 상대경로로 임포트 할 때 __name__을 기준으로 상대경로를 파악한다고 한다. 허나 어떤 파이썬 파일을 직접 실행시키면 __name__이 __main__으로 설정된다. 이때 상대경로 임포트는 항상 실패한다고 한다. https://stackoverflow.com/questions/16981921/relative-imports-in-python-3 Relative imports in Python 3 I want to import a function from another file in the same directory. Usually, one of the following works: from .mymodule import myfunction f.. 2023. 12. 14.
파이썬 가상환경 사용법 1. 파이썬 가상환경이란 각 파이썬 프로젝트 폴더마다 서로 다른 패키지 버전을 요구한다고 가정하자. 프로젝트를 여러개 왔다 갔다 할 때 마다 매번 pip로 패키지를 지우고 다시깔고. 생각만해도 끔찍하다. 그래서 나온게 가상환경이다. 가상환경을 이용하면, 각 프로젝트마다 가상환경을 만들어 그 가상환경에서 패키지를 따로 설치해서 관리할 수 있다. 2. 사용법 가상환경 생성방법은 사용법은 다음과 같다 python -m venv 가상환경이름 보통 가상환경 이름은 .venv를 사용하는게 보통이다. 즉 python -m .venv 가상환경을 활성화 하려면 다음과 같이 activate를 활성화 시켜준다 source 가상환경이름/bin/activate 그리고 아래의 커맨드를 입력해보라 which python which.. 2023. 7. 31.
개발환경을 편리하게 해주는 Pyenv 사용법 https://github.com/pyenv/pyenv GitHub - pyenv/pyenv: Simple Python version management Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub. github.com 1. Pyenv란? 파이썬 버전을 관리해주는 프로그램이다. 하나의 컴퓨터에 여러가지 파이썬버전을 설치하고 이를 관리해준다. 왜 필요한가? 개발을 하다가 파이썬 버전이 여러개일 필요가 있다. 어떤 라이브러리는 특정버전을 요구하고, 다른 라이브러리는 또 다른버전을 요구하고. 매번 재설치를 하고 관련 패키지를 설치하는것은 몹시 복잡한 일이다. 이를 위해.. 2023. 7. 31.
[백준 2592] 부등호 https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력 www.acmicpc.net 문제 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시된 부등호 순서열 A가 다음과 같다고 하자. A ⇒ 2023. 4. 6.
[프로그래머스] 연속 펄스 부분 수열의 합 https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 참 알고리즘 공부하는데 아직도 부족하다고 느껴지는 문제였다. 이 문제의 알고리즘 분류는 누적합 이다 기억하자.. 특정구간의 합을 구한다 => 누적합을 쓰자 1. 아이디어 각 펄스 수열의 누적합을 구한다. 특정 구간의 합이 가장 큰 부분의 합은 누적합의 최소값과 최대값의 차이이다 def solution(sequence): prefixSum = [[0 for _ in range(len(sequenc.. 2023. 3. 8.
[알고스팟] 쿼드 트리 뒤집기 https://algospot.com/judge/problem/read/QUADTREE algospot.com :: QUADTREE 쿼드 트리 뒤집기 문제 정보 문제 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적 algospot.com 해설 분할정복을 이용한다. 각 구역은 4조각으로 나누면서 재귀를 호출한다. 재귀를 호출하면서 이미지를 상하 뒤집는다 서적에 나온대로 string을 매번 인덱스를 계산하는게 아니라 반복자를 이용하여 필요한 만큼 가져다 쓴다 lt : left top rt : right top lb : left bottom rb : right bottom def decomp.. 2023. 1. 6.
파이썬의 iterator 사용법 1. 개요 파이썬으로 알고리즘을 풀다보면 간혹가다 iterator를 써야하는 경우가 생긴다. 이번 기회에 한번 사용법을 알아보자 2. 사용법 iterable한 객체에서 반복자를 얻어오는 방법은 다음과 같다 iterable = [ 1, 2, 3, 4, 5 ] it = iter(iterable) 값을 꺼내오려면 다음과같이 next 함수를 사용하면 된다 iterable = [ 1, 2, 3, 4, 5 ] it = iter(iterable) next(it) #1 next(it) #2 next(it) #3 next(it) #4 next(it) #5 3. hasnext 파이썬의 반복자에는 크나큰 결점이 있다. hasnext 메소드가 없다. 더이상 next가 없는 상황에서 next를 호출하면 exception을 일으.. 2023. 1. 6.
[프로그래머스] 사칙연산 https://school.programmers.co.kr/learn/courses/30/lessons/1843 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 연산 기호를 기준우로 좌우로 놔누면서 재귀를 호출한다 연산을 하면서 Max값과 Min값을 계속해서 기록한다 연산 기호를 기준으로 max값과 min값을 계산한다 MAX_DP = [[-987654321 for _ in range(201+1)] for _ in range(201+1)] MIN_DP = [[987654321 for _ in range(201+1)] for _ in range(201+1.. 2022. 12. 28.
[백준 2042] 구간 합 구하기 풀이 세그먼트 트리를 이용한다 구글에서 검색해서 나오는 세그먼트 트리 방법들은 arr에 index를 이용하여 구현하는데 나는 그게 싫어서 class안에다가 range를 넣었다. 그러고 나니 생각보다 코드가 깔끔하게 나왔다. import sys class Tree: def __init__(self, sum, range): self.sum = sum self.range = range self.left = None self.right = None def makeTree(node, arr): if node.range[0] > node.range[1]: return 0 if node.range[0] == node.range[1]: node.sum = arr[node.range[0]] return node.sum .. 2022. 12. 27.
[프로그래머스] 등대 해설 노드가 N개인데 N-1개로 모두 연결되어있다 => 트리구조 트리를 만든다. 트리에서 가장 끝의 리프는 불을 키지 않는다. 자식노드가 모두 불이 꺼져있으면 불을킨다 자식노드가 하나라도 불이꺼져있으면 불을 킨다 처음에 루트노드를 무조건 자식이 2개 이상인걸로 잡았다. 그런데 다시 문제를 풀어보니 루트노드는 아무거나 잡아도 상관없어서 1로 맘편하게 했다 from collections import deque import sys sys.setrecursionlimit(10**9) class Tree: def __init__(self,num): self.num = num self.childs = [] self.parentNode = None def printChilds(self): result = "" for.. 2022. 12. 26.
파이썬 얕은복사 깊은복사의 이해 파이썬으로 알고리즘을 풀다보면 파이썬의 주소값 체계 때문에 배열이 꼬이는 현상이 자주 발생한다. 이를 해결하기 위해 이번기회에 파이썬의 동작에 대해 완벽하게 이해해보자 1. 파이썬의 변수 할당의 의미 파이썬의 변수는 모두 포인터인가? 혹은 c++의 참조자인가? 에 대한 얘기가 많다. 찾아보니 파이썬의 variable은 해당 객체에 name을 binding 한다는 얘기가 있다. 무슨뜻인가? 바로 이런거다 a=1 1이라는 객체의 이름을 a 라고 하겠다! 라는 의미이다 2. C++ 포인터, 참조자와의 비교 한번 직접 실험해보자 python >>> a = 1 >>> b = a >>> a = 2 >>> b 1 C++ 포인터 #include #include int main() { int num = 1; int* a.. 2022. 12. 21.
[알고스팟] 소풍 algospot.com :: PICNIC 소풍 문제 정보 문제 안드로메다 유치원 익스프레스반에서는 다음 주에 율동공원으로 소풍을 갑니다. 원석 선생님은 소풍 때 학생들을 두 명씩 짝을 지어 행동하게 하려고 합니다. 그런데 서로 algospot.com 해설 고등학교때 배운 조합 문제이다. 경우의 수가 중복되지 않도록 순서를 강제 해야 된다 import sys C = int(input()) for _ in range(C): N, M = map(int, sys.stdin.readline().rstrip().split()) flist = list(map(int, sys.stdin.readline().rstrip().split())) friends = [[] for _ in range(10)] i = 0 whil.. 2022. 12. 21.
[알고스팟] 보글게임 algospot.com :: BOGGLE 보글 게임 문제 정보 문제 보글(Boggle) 게임은 그림 (a)와 같은 5x5 크기의 알파벳 격자인 게임판의 한 글자에서 시작해서 펜을 움직이면서 만나는 글자를 그 순서대로 나열하여 만들어지는 영어 algospot.com 해설 문제에서 적힌것과 같이 dp로 푸는 대표적인 문제이다. 문제와 부분문제의 개념에 대해 알아야 한다 나는 다음과 같이 정리했다 문제 : 문제에 주어지는 문제 부분문제 : 주어진 문제의 input에서 조각내어 input을 사용하는 문제 가령 인풋이 abcdef 가 들어왔다 하면, a를 빼면 bcdef 이렇게 조각내서 풀면 그게 부분문제 이다 부분문제로 완전탐색을 만들면 dp로 변환하기가 몹시 편리하다 1. 완전 탐색으로 풀기 아래 코드로 하면.. 2022. 12. 21.
[알고스팟] 록 페스티벌 https://www.algospot.com/judge/problem/read/FESTIVAL algospot.com :: FESTIVAL 록 페스티벌 문제 정보 문제 커다란 공연장을 빌려서 록 페스티벌을 개최하려고 합니다. 이 페스티벌은 여러 날 동안 진행되며, 하루에 한 팀의 밴드가 공연장에서 콘서트를 하게 됩니다. 전체 www.algospot.com 풀이 대충 보아하니 무식하게 for문 돌려서 전체 케이스로 풀어도 될거 같은 조건인데 파이썬으로 그렇게 푸니 시간초과가 납니다. 다른사람들 답을 보니 c언어에서는 그냥 무식하게 포문만 돌려도 되던데 말이죠. 특정구간의 합을 빠르게 구하기 위한 알고리즘 방법으로는 세그먼트 트리, 그리고 합을 누적해서 배열을 만드는 방법이 있는데, 문제에서는 값의 수정이 .. 2022. 12. 20.
[프로그래머스] 숫자 타자 대회 https://school.programmers.co.kr/learn/courses/30/lessons/136797 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 해설 너무 어려웠던 문제 ㅠㅠ.. 처음에는 그리디로 풀다가 며칠을 헤메었다. 그리디는 보통 input을 0부터 끝까지 훑는데 하다보니 그리디로는 풀리지 않고, 답을 numbers인덱스의 가장 마지막부터 훑어야 한다는걸 알았다. 즉 dp를 써야된다는 것 파이썬에서 재귀를 돌리다 런타임에러가 난다면 setrecursionlimit을 항상 설정해주자! 아이디어는 다음과 같다. 인풋이 두손가락에 .. 2022. 12. 16.
파이썬 다차원 배열 복사 시 주의사항 다차원 배열의 얕은 복사 >>> a = [[1,2],[3,4]] >>> b = a[:] >>> a [[1, 2], [3, 4]] >>> b [[1, 2], [3, 4]] >>> a[1][1] = 9 >>> a [[1, 2], [3, 9]] >>> b [[1, 2], [3, 9]] 위 케이스처럼 배열을 복사하면 얕은 복사가 일어난다. 문제는 리스트안에 mutable한 변수(List와 Dict같은)이 있으면 주소값이 복사되어버린다! 그래서 코드 후반부 처럼 값을 변경하면 다른값도 전부 변경되어 버린다. a = b[:] a = b.copy() 전부 얕은복사이다. Mutable 데이터 타입 사용자 정의 객체 list dictionary set Immutable 데이터 타입 int float decimal boo.. 2022. 12. 15.
[프로그래머스] 억억단을 외우자 https://school.programmers.co.kr/learn/courses/30/lessons/138475 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 일단 억억단에서 등장하는 횟수는 약수의 개수와 같다. 고로 약수를 빠르게 얻는법을 알아야 한다. 약수를 얻은 다음에 (숫자,약수) 를 조건에 맞게 sort해준뒤 값을 구한다. 약수 빠르게 구하는법은 추후 정리. 10번문제가 채점 서버의 상태에따라 통과되기도 하고 안하기도 한다. 다른사람 풀이를 돌려봐도 마찬가지... divisor = [0] * 5000001 def solution(e, s.. 2022. 12. 13.
파이썬 약수 구하기 1. 설명 어떤수의 약수를 구하면 N=A*B 형태로 나타낼 수 있다. 하나의 약수, 예를들어 A를 구하면 B는 N/A로 구할 수 있다 A와 B가 값이 다르다면 2개를 세어주어야 하고, A와 B가 같다면 1개만 세어주어야 한다 작은숫자부터 약수 A를 구한뒤 A*A가 N(N은 A*B)보다 작다면, A와 B는 다른값이므로 2개를 세어준다. 여기서 B는 A보다 큰값을 가지게 된다. 만약 A를 구하고, A*A가 N이라면 A와 B는 같은 값이다. 이후 A보다 큰값에서 약수 계산은 이미 계산되어있으므로 불필요하다 이때 시간복잡도는 루트N이다 def divisor(x): i = 1 result = 0 while i*i 2022. 12. 13.
[프로그래머스] 디펜스 게임 https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 게임을 하다 죽었다고 치자. 죽었을 때 과거의 적들중 가장 값이 큰값에 k를 소모하면 더 오래 게임하지 않을까? 알고리즘 과정은 다음과 같다 while문을 돌리면서 게임을 한다 게임을 하다가 죽으면 이전 적들중 가장 큰 값에 k를 사용한다 => 이전적들은 heapq로 저장하면 가장 큰놈을 찾을 수 있다 내가 실수한점 k는 죽었을 때 한번만 써야 하는데, 죽었을 때 k를 while문으로 전부.. 2022. 12. 12.
[프로그래머스] 쌍둥이 빌딩 숲 https://school.programmers.co.kr/learn/courses/30/lessons/140105?language=python3# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 나머지 연산이 있는걸 보니 전형적인 dp 문제이다. (n,c) 를 (n-1,c-1) 과 (n-1,c)로 나누어 생각한다. 새로들어온 n이 두개가 다 가장 뒤로 배치된다고 하자. n은 어차피 가장 크므로 나머지 경우의수는 solution(n-1, c-1)이 될 것이다. 만약 n의 건물 사이에 아래처럼 다른건물이 들어오거나 앞서있다면? (n, n-1)의 이 한쌍.. 2022. 12. 10.
반응형