알고리즘

파이썬에서 빈번하게 마주하는 몇 가지 편하게 하는 방법

Dibrary 2022. 8. 30. 09:50
반응형

안녕하세요 Dibrary입니다.

이번에는 알고리즘을 풀다 빈번하게 마주하는 방법을 몇 가지 정리해보고자 합니다.
정말 사소한건데, 코드가 꽤나 길어지면 이 부분에서 시간 잡아먹힐땐 아주 아깝다는 생각이 들곤 하죠.

알고리즘을 꽤나 많이 풀어 보신 분들이야 익숙할 수 있는데, 저같이 몰라서 산전수전 다 찾아보고 뒤져봐야 하는 입장에서는 ... ㅠ.ㅜ

 


1. 단일 index로 가져오는 방법과 슬라이싱이 가능하다면 슬라이싱을 쓰자.

무슨말이냐면 코드를 먼저 보여드리겠습니다.

10개의 값이 있는 리스트에 [ : ] 꼴의 슬라이싱을 쓰면 범위를 벗어나더라도 '에러'가 나지 않습니다.

그러나, index로 가져올 때는 범위 밖에 있으면 '에러'가 납니다.

 

index로 값을 가져오는 코드를 작성하다가 이 에러를 마주해서 코드를 막 변경해놓으면, 다른사람들 코드에서는 편하게 슬라이싱을 이용해 해결한 것을 볼 수 있습니다.

 


2. 사전형을 만들 때 defaultdict를 쓸 수 있다면 쓰자.

임의의 문자열에서, 각 문자의 갯수를 센다고 가정할 때, 저는 주로 dict 꼴의 자료형을 씁니다. 

근데, dict를 쓰면 key가 없는 경우, 있는 경우를 나눠줘야 합니다. 왜냐하면, 없는 경우에 다짜고짜 value를 넣으려 하면 에러가 나니까요

반면, defaultdict를 쓴 경우라면 key가 없어도 value가 들어갑니다. 위 식에서 저는 기본값을 int로 지정했으므로 key가 없는 경우 0이 먼저 설정되고, 해당 값에 대해 연산이 이뤄집니다.

물론, 꺼내 쓰는 방법은 dict와 하나도 다를 바가 없습니다.

그럼 이 두 개의 메모리 용량 차이가 두드러지게 날까요?

우선 위 크기 정도로는 크게 차이나지 않는 것을 볼 수 있습니다.
데이터를 10000개 까지 넣었어도 그렇게 큰 차이는 나지 않네요. 

 


3. 결과 출력할 때, 결과값을 담아 놓은 객체가 iterable한 값이라면 join을 사용해보자.

위 코드랑 아래 코드는 같은 결과를 내지만, 보기에는 아래가 훨씬 간편합니다.

list만 되냐구요? 아뇨 set도 됩니다.

알고리즘 문제를 풀다가 결과를 출력해서 반환하는 경우가 많은데, 이럴 때 깔끔하게 처리할 수 있습니다.

728x90
반응형