전체 글

📜 Language/[python]

[파이썬] if __name__ == "__main__"

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..

📜 Language/[python]

[파이썬] 순열과 조합 - permutations, combinations

알고리즘 문제를 풀 때, 순열과 조합 개념이 필요한 문제들이 있다. 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..

📜 Language/[python]

[파이썬] sort (feat. lambda)

파이썬에는 기본 정렬 라이브러리가 존재한다. 시간복잡도는 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], [..

📜 Language/[python]

[파이썬] 0100110과 같이 0이 붙어서 입력될때

입력 예) 0110100 0110101 1110101 0000111 0100000 0111110 0111000 방법 N = 7 arr = [] for _ in range(N): arr.append(list(map(int,input())))

📜 Language/[python]

[파이썬] 2차원 리스트 복사할때 - deep copy, slicing

문제를 풀다 보면 기존의 리스트를 보존하기 위해 복사가 필요한 경우가 있다. 이럴때 잘못 복사하게 되면 메모리 주소도 같이 복사되어서 원래 있던 배열을 건드리게 되는 경우가 발생한다. 따라서 복사할때 필요한 깊은복사에 대해 알아보고자 한다. mutable, immutable 파이썬에서 객체는 변경 가능한 객체와 변경이 불가능한 객체가 존재한다. 여기서 변경이 가능한 객체는 mutable, 변경이 불가능한 객체는 immutable이라고 한다. class 구분 list mutable set mutable dict mutable bool immutable int immutable float immutable tuple immutable str immutable mutable과 immutable mutable과..

📜 Language/[python]

[파이썬] RecursionError가 뜰때, 입력을 받을때 - sys

주로 알고리즘 문제 풀 때, 안 쓰면 섭섭한 sys라이브러리 자주 쓰는 기능들을 몇 가지 적어둠. sys.setrecursionlimit() 파이썬에서 재귀를 사용해서 문제를 풀 때 무조건 필요한 함수. 파이썬은 기본적으로 재귀 제한이 매우 적은 편이기에 문제를 풀 때 자주 런타임 에러가 발생한다. 재귀가 막힌다 싶으면 무조건 작성해야 함. import sys sys.setrecursionlimit(10**6) sys.stdin.readline() 주로 입력을 빨리 받고싶을때 input() 대신 사용한다. 반복문으로 입력을 많이 받을때 sys.stdin.readline()을 사용해주면 시간을 단축시킬 수 있다. import sys arr = [] arr.append(sys.stdin.readline())..

📜 Language/[python]

[파이썬] 리스트를 문자열로 - join

알고리즘 문제를 풀고 정답을 출력할때 자주 사용하는 join함수. 알아두면 유용하다. arr1 = ['a', 'b', 'c', 'd'] print(', '.join(arr1)) 출력 결과: a, b, c, d join은 기본적으로 '구분자'.join(리스트) 형태를 가지고 있다. str1 = ''.join(arr1) print(str1) 출력결과: abcd join함수는 문자열을 반환해준다. a = ['is', 'you', 'down'] print('_'.join(a)) print(' '.join(a)) 출력결과: is_you_down is you down 이런식으로 사용 가능 arr2 = [1, 2, 3 ,4] print(', '.join(map(str,arr2))) 출력결과: 1, 2, 3, 4 jo..

🧩 Problem Solving/[백준]

[백준] 1647 도시 분할 계획 (python 파이썬)

https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 난이도에 비해 매우 간결한 문제다. 대신 크루스칼 알고리즘과 유니온 파인드에 대해 알고 있어야 한다. 아이디어 1. 마을을 두 개로 분리하는 방법 크루스칼 알고리즘에 대해 잘 기억하고 있다면 쉽게 떠올릴 수 있다. 크루스칼 알고리즘으로 최소 스패닝 트리를 만들고 여기서 비용이 가장 큰 간선을 잘라주면 된다. 최소 스패닝 트리에서는 사이클이 존재하지 않는다. 그..

제봉아
Overthinking