[Q. 04] 가장 흔한 단어
·
코딩테스트/알고리즘
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지않으며, 구두점(마침표, 쉼표 등) 또한 무시한다. 먼저 구두점을 제거하고, 소문자로 변경한다. 1에서 사용했던 방법 그대로 사용한다. paragraph = re.sub(r'[^a-zA-Z]', ' ', paragraph).lower().split() 그 다음, 밴에 있는 단어를 제외한 리스트를 새로 작성한다. paragraph = [s for s in paragraph if s not in banned] 파이썬의 딕셔너리를 이용하여 paragraph 리스트에 나온 단어의 갯수를 카운팅한다. par_dict = {} for par in paragraph: if par_dict.get(par) == None: par_dict[..
[Q. 03] 로그 파일 재정렬
·
코딩테스트/알고리즘
로그를 재정렬하라. 기준은 다음과 같다. 1. 로그의 가장 앞 부분은 식별자다. 2. 문자로 구성된 로그가 숫자 로그보다 앞에 온다. 3. 문자 로그는 내용에 따라 사전순으로 정렬됩니다. 내용이 같으면 식별자를 기준으로 사전순으로 정렬합니다. 4. 숫자 로그는 입력 순서대로 한다. 먼저 로그가 숫자인지 문자인지를 판별해서 서로 분리해준다. strs = [] nums = [] for log in logs: if log.split()[1].isdigit(): nums.append(log) else: strs.append(log) 판별에는 식별자 후 문자가 숫자인지를 판별해서 넣어주었다. 숫자 로그들은 입력순이기 때문에 따로 정렬할 필요가 없으나, 문자는 동일할 경우 식별자 순으로 한다는 조건이 있다. 그러므..
[Q. 02] 문자열 뒤집기
·
코딩테스트/알고리즘
문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라 투 포인터를 사용한다. 문자열을 뒤집어야 하기에 왼쪽 포인터와 오른쪽 포인터를 사용한다. left, right = 0, len(s)-1 그리고 left가 right를 넘어설 때 까지, 문자열을 뒤집는다. while left None: left, right = 0, len(s)-1 while left
[Q. 01] 유효한 팰린드롬
·
코딩테스트/알고리즘
주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며 영문자와 숫자만을 대상으로 한다. 팰린드롬이란, 앞에서 읽든 뒤에서 읽든 같은 문장을 뜻한다. 먼저, 주어진 입력에서 여백, 공백, 특수문자 등을 지우고 숫자와 영문자만 남도록한다. 그 후, 소문자로 바꾸어 준다. s = re.sub(r'[^a-zA-Z0-9]', '', s).lower() 내장 라이브러리 re를 사용하였고, sub 함수를 통해 a~Z와 0~9를 제외한 모든 문자를 제거하였고, lower함수를 통해 소문자로 만들었다. 그 다음, 플래그를 하나 만든 뒤 앞에서부터 체크하며 뒷 문자와 다른것이 False를 그렇지 않다면 True를 리턴하도록 하였다. for i in range(0, len(s) // 2): if s[i] != ..
[Q7] 두 수의 합
·
코딩테스트/알고리즘
[리트코드 1] Two Sum 덧셈하여 타겟을 만들 수 있는 배열의 두 숫자 인덱스를 리턴하라. 처음 이 문제를 보았을 때, 나는 모든 경우의 수를 다 비교해가며 정답을 도출했었다. 하지만, 코테 볼 때 항상 효율성에서 틀려버린 경험을 바탕으로 책을 읽어보니 매우 효율적인 방법이 있음을 알 수 있었다. 먼저, 다음과 같은 배열이 있다고 가정하자. nums = [1, 3, 6, 8, 5] 이 배열에서 숫자 6의 위치를 찾는 방법은 find 함수를 사용하는 것이다. 하지만 이는 시간복잡도가 O(n)이다. 하지만, 다음과 같이 배열의 인덱스와 숫자를 딕셔너리로 구현하여 참조하면 시간복잡도를 O(1)로 줄일 수 있다. nums_dict = {} for i, num in enumerate(nums): nums_d..
[Q6] 가장 긴 팰린드롬 부분 문자열
·
코딩테스트/알고리즘
[리트코드 5] Longest Palindrome Substring 가장 긴 팰린드롬 부분 문자열을 출력하라. 잘 모르겠어서, 교재에 적혀있는 풀이방법을 토대로 코딩했다. 내가 이해한 교재의 방식은 짝수 홀수의 슬라이딩 윈도우를 생성하여 앞으로 전진해가며, 그 윈도우의 크기를 확장하여 긴 팰린드롬을 찾는 방법이다. 먼저 팰린드롬인 문자열이 홀수의 자릿수 일수도, 짝수의 자릿수 일수도 있으므로 2개 모두 검사한다. for i in range(len(s)-1): even = s[i:i+2] odd = s[i:i+1] if even == even[::-1]: pass if odd == odd[::-1]: pass 그 다음 문자열을 확장하여 가장 큰 팰린드롬 문자열을 리턴하는 함수를 만든다. def expand..