본문 바로가기

Python32

[ 6. 문자열 조작 ] - 로그파일 재정렬 (Reorder Log Files) 📍 로그파일 재정렬 로그를 재정렬 하라. 기준은 다음과 같다. 로그의 가장 앞 부분은 식별자다. The letter-logs come before all digit-logs.(문자로 구성된 로그가 숫자 로그보다 앞에 온다. ) The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.(식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.) The digit-logs maintain their relative ordering.(숫자 로그는 입력 순서대로 한다.) ⚡️ 나의.. 2021. 4. 6.
[python] 파이썬을 파이썬답게 ✏️ 서론 프로그래머스에서 문제를 풀고 잠깐 쉬다가 강의 탭을 클릭했는데, 파이썬을 파이썬답게라는 강의를 봤다. 파이썬 문법을 이미 알고 있는 분을 대상으로 pythonic한 코드를 배워볼 수 있는 강의인데, 도움이 많이 되었다. 같은 코드를 pythonic하게 작성할때의 쾌감이란... 아무튼 파트는 총 7개로 나뉘어져있으며 코딩테스트 문제를 풀때 한번씩은 꼭 접해보는 유형들이다. 파이썬의 문법은 알고있는데 이를 응용하고 싶다고 생각하는 분들에게 추천해줄만한 강의다.(게다가 무료!) ✏️ 본론 📌 2차원 리스트 뒤집기 mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] new_list = list(map(list, zip(*mylist))) 👉🏽 [[1, 4, 7], [2, 5,.. 2021. 4. 5.
[ 6. 문자열 조작 ] - 가장 흔한 단어(Most Common Word) 📍 가장 흔한 단어(most common word) 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표 등)또한 무시한다. ⚡️ 나의 풀이 입력값 전처리(preprocessing)과정 중 구두점(punctuation)을 제거하는 방법에서 시간을 많이 쏟았는데, 결론적으로 string.punctuation 문자열 함수를 사용하면 쉽게 해결 할 수 있다. 이 방법외에도 정규식(regular expression)을 사용해도 되는데 오히려 string.punctuation보다 간편해 보였다. 자주 사용하도록 외워둬야겠다. 정규식에서 \w는 단어 문자(word character)을 뜻하며, ^는 not을 의미한다. (re.sub(r'[^\w]', ' '.. 2021. 4. 4.
[ 6. 문자열 조작 ] - 문자열 뒤집기(Reverse String) 📍 문자열 뒤집기(reverse string) 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라 ⚡️ 나의 풀이 문자열을 뒤집는 함수는 대표적으로 reverse()함수가 있는데, 책에서는 투 포인터(two_pointer)를 이용한 스왑방식과 파이썬 다운 방식인 reverse함수를 이용했다. 투 포인터 알고리즘은 Left와 Right의 인덱스를 선언하여 범위를 조정해서 풀이하는 방식인데, 나는 평소에 잘 사용하지 않았던 방식이다. 전통적인 방식이니까 어떻게 사용하는지 알고있자. 그리고 Left와 Right를 0과 len(s)-1로 선언한 이유는 index가 0부터 세기때문에 0으로 주었고 또, len값에서 -1해준 값이 제일 마지막 index 값이된다. 두번.. 2021. 4. 2.
[ 6. 문자열 조작 ] - 문자열 슬라이싱(String Slicing) 💡 문자열 슬라이싱 파이썬의 문자열 슬라이싱은 내부적으로 매우 빠르게 동작한다. 위치를 지정하면 해당 위치의 배열 포인터를 얻게 되며, 이를 통해 연결된 객체를 찾아 실제 값을 찾아내는데, 이 과정은 매우 빠르게 진행되므로 문자열을 조작할 때는 항상 슬라이싱을 우선으로 사용하는 편이 속도 개선에 유리하다. 다음 표는 슬라이싱과 다른 연산 작업의 속도를 비교한 결과인데, 슬라이싱의 빠른 속도를 잘 보여준다. 알고리즘 실행 시간 `슬라이싱` 0.499 마이크로초 `리스트 reverse()` 2.46 마이크로초 `reversed() + join()` 2.49 마이크로초 `for 반복` 5.5 마이크로초 `while 반복` 9.4 마이크로초 재귀 24.3 마이크로초 2021. 4. 2.