[백준]11660 구간 합 구하기 5 (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 구간 합 구하기 2차원 버전 아이디어 1. 누적 합 사용 구간 합 구하기 4와 유사하게 풀었다 먼저 (0 ,0)에서 (x , y)까지의 합을 arr [x][y]에 저장한다. 그럼 아래와 같은 리스트를 만들 수 있다. 이걸 사용해서 구간 합을 구하면 된다. 예를 들어 (1, 1)에서 (2, 3)까지 구하려면(문제에서는 2,2 ~ 3,4) arr [2][3]..
[백준] 10942 팰린드롬? (python 파이썬)
·
🧩 Problem Solving/[백준]
https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 배열에서 i부터 j까지가 팰린드롬인지 아닌지 여러 번 확인하는 문제. 아이디어 1. dp 간단하게 리스트 슬라이싱으로는 시간 초과가 나서 dp를 사용 i번째부터 j까지의 수가 팰린드롬인지 확인한 결과를 저장하기 위해 이차원 리스트를 사용하기로 결정했다. 2. 점화식 먼저 무조건 팰린드롬인 i부터 i까지의 수는 1로 저장해둔다. 그리고 i번째 수와 i + 1번째 수가 같으면 팰린드롬이니까 이것도 1로 저장. 점화식은 이미 팰린드롬인 수 ..
[파이썬] dis모듈로 바이트 코드 확인 - dis
·
📜 Language/[python]
바이트 코드란? 바이트 코드(Byte code)는 고급 언어로 작성된 소스 코드를 가상머신 이 이해할 수 있는 중간 코드로 컴파일한 것을 말한다. 아래 코드는 else와 elif 의 시간차를 확인하기 위해 dis 모듈을 사용함. import dis def Func_else(n): if n % 2 == 0: return True else: return False def Func_elif(n): if n % 2 == 0: return True elif n % 2 == 1: return False dis.dis(Func_else) print('--------------------------------------------------') dis.dis(Func_elif) 결과: 4 0 LOAD_FAST 0 (n..
[파이썬] 파이썬 코드 실행 측정 - time
·
📜 Language/[python]
import time import random arr = [] for _ in range(100000): arr.append(random.randint(1,10000)) start_time = time.time() # 측정 시작 arr.sort() end_time = time.time() # 측정 끝 print('time:',end_time - start_time) 출력: time: 0.012936830520629883 단위는 초
[파이썬] if __name__ == "__main__"
·
📜 Language/[python]
if __name__ == "__main__" 직접 실행시켰을 때 실행되는 코드, 메인 함수를 뜻한다. 파이썬 스크립트를 실행하면 if __name__ == "__main__"에 있는 코드를 실행한다. 간단한 예시 def olleh(): print("녕안") if __name__ == "__main__": olleh() 실행 결과 녕안 if __name__ == "__main__"을 안썼을때 다음 두 개의 파일이 있다고 생각해보자. # testmodule.py def joah(cat): print(cat +' 좋아') joah('하루') # test.py import testmodule testmodule.joah('나루') testmodule.py에 joah라는 함수를 사용하려고 test.py에 imp..
[파이썬] 순열과 조합 - permutations, combinations
·
📜 Language/[python]
알고리즘 문제를 풀 때, 순열과 조합 개념이 필요한 문제들이 있다. itertools 라이브러리를 사용하면 매우 간단하게 순열과 조합을 만들 수 있다. itertools 파이썬에 있는 표준 라이브러리다. 다양한 iterator가 있지만 그중 permutations(), combinations()만 간단하게 다룬다. permutations() from itertools import permutations arr = [1, 2, 3, 4] for p in permutations(arr, 2): print(p) 결과: (1, 2) (1, 3) (1, 4) (2, 1) (2, 3) (2, 4) (3, 1) (3, 2) (3, 4) (4, 1) (4, 2) (4, 3) tuple 형태로 나온다. combinati..
[파이썬] sort (feat. lambda)
·
📜 Language/[python]
파이썬에는 기본 정렬 라이브러리가 존재한다. 시간복잡도는 O(NlogN), 알고리즘은 병합 정렬과 삽입 정렬의 아이디어로 만들었다고 한다. 아래는 문제를 풀때 자주 사용되는 코드들이다. lambda를 사용하면 2차원 리스트 정렬도 가능하다. a.reverse() # a를 거꾸로 뒤집음 a.sort() # a를 오름차순으로 정렬 a.sort(reverse=True) # a를 내림차순으로 정렬 a.sort(key = len) # a를 key 옵션에 따라 정렬 b = a.sorted() # sorted 정렬한것을 반환 A = [[2,3],[1,2],[5,1],[2,1],[1,5]] C = sorted(A, key = lambda x : x[0]) #[[1, 2], [1, 5], [2, 3], [2, 1], [..
[파이썬] 0100110과 같이 0이 붙어서 입력될때
·
📜 Language/[python]
입력 예) 0110100 0110101 1110101 0000111 0100000 0111110 0111000 방법 N = 7 arr = [] for _ in range(N): arr.append(list(map(int,input())))