목록python/알고리즘 (24)
incastle의 콩나물
BUT, if you're appending in a large number of loops. It's faster to append list first and convert to array than appending NumPy arrays. 큰 숫자를 loop를 돌리면, list에 append한 다음에 마지막에 numpy로 바꿔주는 게 더 빠르다 In [8]: %%timeit ...: list_a = [] ...: for _ in xrange(10000): ...: list_a.append([1, 2, 3]) ...: list_a = np.asarray(list_a) ...: 100 loops, best of 3: 5.95 ms per loop In [9]: %%timeit ....: arr_a = n..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dAQdyw/btqDnwOZv1K/MCp5wZbjiKvH699JkNuN3k/img.jpg)
문제 한수는 2차원 배열 (항상 2^N * 2^N 크기이다)을 Z모양으로 탐색하려고 한다. 예를 들어, 2*2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, 2차원 배열의 크기가 2^N * 2^N라서 왼쪽 위에 있는 칸이 하나가 아니라면, 배열을 4등분 한 후에 (크기가 같은 2^(N-1)로) 재귀적으로 순서대로 방문한다. 다음 예는 2^2 * 2^2 크기의 배열을 방문한 순서이다. N이 주어졌을 때, (r, c)를 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. 다음 그림은 N=3일 때의 예이다. 재귀 냄새가 난다면 최소 단위를 생각하자. 2*2의 모눈 종이가 최소 단위이다. 그 단계까지 어떻게 코드를 보낼 것인가. N, X, Y= map(int..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6VrRF/btqDnwOjHp4/rQe5gwL6kP6Mi2In34TKIK/img.png)
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 이 문제 같은 경우는 입력 개수가 많고, 값이 범위는 상대적으로 좁다. 이 때 사용할만한 알고리즘이 계수 정렬(Counting Sort) 알고리즘이다 계수 정렬 - 배열의 인덱스를 특정한 데이터의 값으로 여기는 정렬 방법 - 배열의 크기는 데이터의 범위를 포함할 수 있도록 설정 - 데이터가 등장한 횟수를 센다. import sys n = int(sys.stdin.read..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cAm8eS/btqDeJT1uCV/vQHpN4f1olvGNuxBpZG0jk/img.png)
문제 창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다. 키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표나 백스페이스를 입력해도 정확한 비밀번호를 알아낼 수 있다. 강산이가 비밀번호 창에서 입력한 키가 주어졌을 때, 강산이의 비밀번호를 알아내는 프로그램을 작성하시오. 아이디어 - stack을 두 개 준비한다. - 커서가 움직임에 따라서 스택에서 pop과 append를 반복한다. left_stack = [] right_stack = [] data = input() for i in data: if i == '-': if left_stack..