Python 9

[Python] DFS에서 리스트 접근 방법

Problem DFS 내에서 리스트를 인덱싱하여 재귀함수의 인자로 넘겨주었는데, 시간초과가 발생하였다. def cal(_list): for num in _list: ... cal(_list[1:]) Solution 이유는 리스트를 슬라이싱 할 때 시간이 걸리기 때문이다. _list[a:b] 면 b-a만큼 시간복잡도가 발생하는데, 이러한 작업이 DFS 내에서 매번 발생하여 시간이 초과되는 것이다. 따라서 DFS내에서 리스트를 접근하려면, 인자로 리스트가 아닌 리스트의 인덱스를 넘겨주는 것이 성능상 더 좋다. _list = [1,2,3,4,5] def cal(start): for i in range(start, len(_list)): ... cal(start+1) URL 삼성그룹 SW, IT취업준비방 내 피드백

Python 2023.10.23

[Python] Python에는 왜 long이 없을까?

Problem 다른 언어에는 존재하는 long이 왜 Python에는 없을까? Solution 기존 Python 2 버전의 경우 int와 long이 구분되어 있었다. int는 C스타일의 고정 정밀도였고, long은 임의 정밀도였다. Python 2.4부터 int가 충분하지 않을 경우 long으로 자동 변환하는 기능이 추가되어 오버플로우가 발생하지 않도록 변경되었다. 이후 Python 3에서 임의 정밀도의 int로 통합되었는데, 임의 정밀도는 무엇일까? 임의 정밀도는 쉽게 말해 무한대의 자릿수를 지원하는 정수형이다. 정수를 숫자의 배열로 취급하기 때문에 가능한데, 말그대로 정수를 자릿수로 쪼개어 2의 30승 진수로 표현한다. ex) 123456789101112131415 (437976919 * 2**(30*..

Python 2022.10.18

[Python] *args 와 **kwargs 란?

Problem 함수 인자로 *args를 사용하는 것과 **kwargs 를 사용하는 것은 각각 무엇을 의미하는 것일까? Solution *args와 **kwargs는 무엇을 의미할까? *args와 **kwagrs는 가변인자를 핸들링하기 위해 사용된다. 파이썬은 JAVA, C++ 등 다른 언어에서 지원하는 형식의 함수 오버로딩을 지원하지 않는다. def add(a): return a def add(a, b): return a+b def add(a, b, c): return a+b+c # error! 대신 다른 방법으로 오버로딩을 구현할 수 있는데, 그 방법 중 한 가지가 바로 *args와 **kwargs를 사용하는 것이다. *과 **뒤에는 원하는 이름을 사용할 수 있다. 가령 *parameter, **lis..

Python 2022.06.27

[Python] 딕셔너리의 키와 기본 값을 저장하기

Problem 딕셔너리의 키만 정해져있고 해당 키에 대한 값이 정해져있지 않을 때, 키를 먼저 등록한 다음 이후에 값을 변경하려고 한다. Solution 키가 다음과 같다고 가정하자. keys = [1,2,3,4,5,6,7] 해당 키를 딕셔너리에 등록하고, 값은 추후에 변경하고자 한다. 이럴때 필요한 것이 dict.fromkeys([키], 기본값)이다. keys = [1,2,3,4,5,6,7] keys_dict = dict.fromkeys(keys, "") print(keys_dict) {1:"", 2:"", 3:"", 4:"", 5:"", 6:"", 7:""} 기본 값을 지정하지 않으면 None이 값으로 저장된다. URL

Python 2022.03.24

[Python] 문자열 리스트를 정수 리스트로 변환

Problem 문자열로 이루어진 리스트를 정수 리스트로 변환하기 str_list = ['1', '2', '3', '4'] Solution map()함수를 사용한다. map(function, iterable) 함수는 각 요소에 function을 적용하고, 반복자를 반환한다. 따라서 str_list에 적용하려면 map함수를 적용한 다음, list함수를 통해 리스트로 변환하면 된다. str_list = ['1', '2', '3', '4'] int_list = list(map(int, str_list)) print(int_list) [1,2,3,4] 두 번째 방법은 파이썬 식 리스트 생성이다. str_list의 요소를 하나씩 읽어 int로 변환하고, 해당 요소를 리스트에 추가하면 된다. 로직은 다음과 같다. s..

Python 2022.03.24

[Python] 두 딕셔너리의 합 구하기

Problem a = {'a': 1, 'b': 2, 'c': 3} b = {'a': 2, 'd': 4} 일때, a와 b를 합친 값 c = {'a': 3, 'b': 2, 'c': 3, 'd': 4} 을 구하고자 한다. 같은 키가 존재하면 연산을, 키가 존재하지 않으면 병합하는 과정이 필요하다. Solution collections.Counter를 사용하면 된다. 단, 모든 value 값은 int 형이어야 한다. from collections import Counter a = {'a': 1, 'b': 2, 'c': 3} b = {'a': 2, 'd': 4} c = Counter(a) + Counter(b) #출력결과 Counter({'a': 3, 'b': 2, 'c': 3, 'd': 4}) 만약 딕셔너리를 ..

Python 2022.02.08

[Python] list, set, dict, tuple

Python에는 built-in 자료구조로 list, set, dict, tuple이 존재한다. list - 데이터 삽입, 삭제가 용이함. 순차적. tuple - 데이터 읽기에 용이함. 순차적. set - 중복된 값을 불허함. 비순차적. dict - 키:값. 비순차적. 각 구조에서 특정 값이 포함되어 있는지(containment) 찾을 때의 성능은 각각 list - O(n) tuple - O(n) set - O(1) dict - 이다. set은 Hash Function을 사용하기 때문에 존재여부를 확인할 때 성능이 뛰어나다. *Hash Function: 특정 연산을 이용하여 키 값을 받아서 value를 가진 공간의 주소로 바꾸어주는 함수. 출처: 노마드 코더 유튜브(개발자라면 꼭 알아야할 Hash Tab..

Python 2021.12.22