본문 바로가기

분류 전체보기521

[ 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.
[ 6. 문자열 조작 ] - 유효한 팰린드롬(Valid Palindrome) 📍 유효한 팰린드롬 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 팰린드롬(Palindrome): 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열 등이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. (위키백과) ⚡️ 나의 풀이 팰린드롬은 위에서 작성한 바와 같이 띄어쓰기나 문장부호를 무시하고 거꾸로 읽어도 동일한 문장을 말한다. 나의 풀이 순서는 다음과 같다. 띄어쓰기나 문장부호를 없앤다 대소문자를 구분하지 않으므로 대문자 혹은 소문자로 통일시킨다. 기존 값과 거꾸로 한 값이 동일한지 확인한다. 방법 1을 풀기위한 아주 완벽한 함수가 있었다. 바로 isalnum()인데, 글자 또는 숫자로 구성되어있으면 True, 아.. 2021. 4. 2.
[ 파이썬(python) ] 프로그래머스 level1 - 이상한 문자 만들기 📌 이상한 문자 만들기 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수를 완성하세요. 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 💡 나의 풀이 s.split(' ')의 중요성을 깨닫게 해준 문제였다. 각 단어는 하나 이상의 공백문자라고 했는데, 문제를 간과하고 s.split()만 사용해서 정답률이 31%로 나왔었다. for ~ in range(len)), for ~ in enumerate 중 내가 쓰기 편한 코드인 enumerate를 사용했다. 다른사람은 내가 작성한 코드를 한 줄로 표현했다. 이 코드를 한 줄로 표현하니까 코드가.. 2021. 4. 2.