Home

CodeUp 01-30 리뷰

1) 10진수 유니코드(Unicode) 값으로 출력하기 예시) n = ord(input()) #입력받은 문자를 10진수 유니코드 값으로 변환한 후, n에 저장 print(n) ord()는 어떤 문자의 순서 위치(ordinal position) 값을 의미한다. 실제로 각각의 문자들에는 연속된 정수 값이 순서에 따라 부여 되어 있다. A:65, B:66, C : 67… ord(c) : 문자 c를 10진수로 변환한 값 컴퓨터로 저장되고 처리되는 모든 데이터들은 2진수 형태로 정수화되어야 하는데, 컴퓨터에 문자를 저장하는 방법으로 아스키코드나 유니코드가 자주 사용된다. 예를들어, 영문 대문자 ‘A’는 ...

Read more

LeetCode 937번 <로그파일 재정렬>

문제 로그를 재정렬하라. 기준은 다음과 같다 로그의 가장 앞 부분은 식별자다 문자로 구성된 로그가 숫자 로그보다 앞에 온다 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다 숫자 로그는 입력 순서대로 한다. 풀이 1) 람다와 + 연산자를 이용 먼저, 문자로 구성된 로그가 숫자 로그보다 이전에 오며, 숫자 로그는 입력 순서대로 둔다. 그렇다면 문자와 숫자를 구분하고, 숫자는 나중에 그대로 이어 붙인다. 로그 자체는 숫자 로그도 모두 문자열로 지정되어 있으므로, 타입을 확인하며 모두 문자로 출력된다. 따라서 다음과 같이 isdigit()을 이용해서 숫자 여부인지를 ...

Read more

LeetCode 819번 <가장 흔한 단어>

문제 금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표 등)또한 무시한다. 풀이 1) 리스트 컴프리헨션, Counter 객체 사용 입력값에는 대소문자가 섞여 있으며 쉼표 등 구두점이 존재한다. 따라서 데이터 클렌징이라 부르는 입력값에 대한 전처리 작업이 필요하다. def mostCommonWord(self, paragraph: str, banned : List[str]) -> str: #단어가 아닌 문자 무시 words = [word for word in re.sub(r'\w','',paragraph) ...

Read more

LeetCode 49번 <그룹 애너그램>

문제 문자열 배열을 받아서 애너그램 단위로 그룹핑하라. 애너그램이란 ? 일종의 언어유희로 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다. 우리말 예로는 ‘문전박대’를 ‘대박전문’으로 바꿔 부르는 단어 등을 들 수 있다. 풀이 1) 정렬하여 딕셔너리에 추가 애너그램을 판단하는 가장 간단한 방법은 정렬하여 비교하는 것이다. 애너그램 관계인 단어들을 정렬하면, 서로 같은 값을 갖게 되기 때문이다. sorted()는 문자열도 잘 정렬하며 결과를 리스트 형태로 리턴하는데, 이를 다시 키로 사용하기 위해 join()으로 합쳐 이 값을 키로 하는 딕셔너리로 구성한다. 애너그램기리는 같은 키를...

Read more

LeetCode 344번 <문자열 뒤집기>

문제 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라 풀이 1) 투 포인터를 이용한 스왑 투포인터에 대해서 간단하게 설명하자면 단어 그대로 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식을 말한다. 여기서는 점점 더 범위를 좁혀 가며 스왑하는 형태로 풀이할 수 있다. 문제에서 ‘리턴 없이 리스트 내부를 직접 조작하라’는 제약사항이 있으므로 다음과 같이 s 내부를 스왑하는 형태로 풀이하면 된다 def reverseString(self, s: List[str]) -> None : left, right = 0, len(s)-1 ...

Read more

LeetCode 125번 <유효한 팰린드롬>

팰린드롬이란 ? 앞뒤가 똑같은 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장을 팰린드롬(Palindrome)이라고 한다. 우리말로는 ‘회문’이라고 부르며, 문장 중에서는 대표적으로 ‘소주 만 병만 주소’ 같은 문장이 이에 해당한다. 이 문장은 뒤집어도 ‘소주 만 병만 주소’가 된다. 이러한 팰린드롬의 특징을 응용하면 여러 가지 재밌는 문제들을 많이 만들어낼 수 있기 때문에 코딩테스트에 매우 자주 출제되는 주제이기도 하다. 이 책에서는 다양한 팰린드롬 응용 문제들을 풀이해본다. 풀이 1 ) 리스트로 변환 def isPalindrome(self, s:str) -> bool : str...

Read more

파이썬알고리즘인터뷰. 5장요약

5장. 리스트, 딕셔너리 리스트 파이썬의 리스트는 말 그대로 순서대로 저장하는 시퀀스이자 변경 가능한 목록을 말한다. 입력 순서가 유지되며, 내부적으로는 동적 배열로 구현되어 있다. 파이썬에서는 list()로 표현된다. 파이썬 리스트의 가장 좋은 점은 매우 다양한 기능을 제공한다는 점이다. 리스트를 사용하면 사실상 스택을 사용할지, 큐를 사용할지를 고민하지 않아도 되며, 스택과 큐에서 사용 가능한 모든 연산을 함께 제공한다. 이는 코딩테스트 시 다른 언어에 비해 매우 유리한 조건을 갖게 되는 셈이며, 코딩 테스트 언어로 파이썬을 택해야 하는 매우 중요한 이유 중 하나이다. 리스트는 다양한 기능을 제공하...

Read more

파이썬알고리즘인터뷰. 4장요약

파이썬 알고리즘 인터뷰. 4장 요약 빅오 빅오로 시간 복잡도를 표현할 때는 최고차항만을 표기하며, 상수항은 무시한다. $O(1)$: 입력값이 아무리 커도 실행시간 일정. 대표적으로 해시 테이블의 조회 및 삽입이 이에 해당함 $O(log n)$: 로그는 매우 큰 입력값에도 크게 영향을 받지 않는 편으로 웬만한 n의 크기에 대해서도 매우 견고. 대표적으로 이진 검색이 이에 해당함 $O(n)$: 입력값만큼 실행 시간에 영향을 받으며, 알고리즘을 수행하는 데 걸리는 시간은 입력값에 비례함. 이러한 알고리즘을 선형 시간 알고리즘이라고 함. 정렬되지 않은 리스트에서 최대값 또는 최소값 경우가...

Read more