본문 바로가기
반응형

분류 전체보기339

파이썬의 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.
CordovaPlugin 기초 1. Cordova Plugin이란 plugin은 Cordova Webview와 native platform간의 통신을 해 주는 Package이다. 이를통해서 Webview에서 할수 없는 일들을 native에서 실행을 할 수 있다. Plugin은 하나의 자바스크립트 인터페이스로 이루어져 있으며 인터페이스 뒤에 여러 네이티브 코드를 숨길 수 있다 2. Plugin 설치 아래 두 커맨드중 하나로 설치 가능하다. npm에 cordova plugin이 설치되어있으면 아래것을 사용하자 cordova plugin add https://github.com/apache/cordova-plugin-device cordova plugin add cordova-plugin-device Plugin의 폴더에는 반드시 plug.. 2023. 1. 4.
[프로그래머스] 사칙연산 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.
ngrok 사용하여 https 적용하기 1. ngrok이란? 로컬에서 개발하고 있는 서버를 외부에 노출시켜주는 프로그램이다. 2. 어떨 때 유용하나? 로컬에서 개발하고 있는 서버를 다른사람에게 잠시 open하고 싶을때가 있다. 같은 와이파이망을 가지면 문제가 없지만 다른 와이파이망을 가지고 있을 경우, 내 서버를 포트포워딩 해 주거나 아니면 aws같은 플랫폼에 서버를 배포해서 전달해야 된다. 몹시 귀찮은 과정이지만 ngrok을 이용하면 편리하다 3. 사용법 이 링크를 타고 ngrok을 다운로드 한다. 그리고 아래와 같이 입력해준다 //ngrok (로컬서버 프로토콜) (로컬서버 포트번호) ngrok http 3000 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.
파이썬 Queue vs Deque 어느것을 사용할 까? Queue와 Deque 알고리즘을 풀 때 어느것을 사용해야 될 까 queue — A synchronized queue class — Python 3.7.14 documentation queue — A synchronized queue class Source code: Lib/queue.py The queue module implements multi-producer, multi-consumer queues. It is especially useful in threaded programming when information must be exchanged safely between multiple threads. The Queue docs.python.org 파이썬 공식문서의 Queue 모듈 내용을 보면 .. 2022. 12. 9.
파이썬 알고리즘 팁 및 필수 지식 1. input 빠르게 받기 import sys n, m = map(int, sys.readline().split()) 2. 문자 숫자 변환 chr 함수와 ord 함수를 이용한다 chr(65) # A ord('A') # 65 3. List Comprehension 응용 keys = [ key for key, value in dict ] values = [ value for key, value in dict ] keysValues = [ (key,value) for key, value in dict] map = [ [] for _ in range(n)] # 텅빈 2차원 배열 zeros = [0] * 10 >>> [ [i,i+1] for i in range(10)] [[0, 1], [1, 2], [2, 3].. 2022. 12. 8.
AttributeError: 'module' object has no attribute 파이썬은 참으로 쉬운 언어이다. 배우지 않아도 개발을 바로 할 수 있을만큼 쉽고 간단하고 강력하다. 그러나 위 에러를 마주하게 된다면 멘붕이 올 것이다. 결론부터 말하면 위 에러를 마주했다는 것은 파이썬의 모듈과 패키지에 대한 이해가 부족한 것이다. 그리고 아마 당신은 패키지를 import했는데 그걸 모듈처럼 사용해서 문제가 생겼을 것 이다. 1. 모듈이란? 파이썬에서 모듈은 .py로 끝나는 파일들 그 자체를 얘기한다. 2. 패키지란? 패키지란 아래처럼 __init__.py 파일을 가지는 폴더 구조를 얘기한다 root/ Package/ __init__.py module1.py module2.py 위 폴더에서는 root 폴더 밑에 Package라는 패키지가 있고, 그 패키지는 module1.py를 가지고 .. 2022. 12. 8.
[NGINX] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64 서버 url 길이가 너무 길어서 그렇다 아래처럼 nginx.conf를 연다 sudo vim /etc/nginx/nginx.conf 그리고 아래 항목을 찾아서 64를 128로 바꿔주자 server_names_hash_bucket_size 128; 2022. 12. 6.
반응형