반응형

프로그래밍/[ Python ] 39

[문자열 조작] 문자열 뒤집기

Q. 문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라. """예제 1""" # 입력 ["h", "e", "l", "l", "o"] # 출력 ["o", "l", "l", "e", "h"] """예제 2""" # 입력 ["H", "a", "n", "n", "a", "h"] # 출력 ["h", "a", "n", "n", "a", "H"] 풀이 1. 투 포인터를 이용한 스왑 # 리턴 없이 리스트 내부를 직접 조작하라는 제약사항이 있으므로 아래와 같이 두개의 포인터로 내부를 # 스왑하는 방식으로 풀이가 가능하다. def reverseString(self, s: List[str]) -> None: left, right = 0, len(s) - 1 while left..

[문자열 조작] 유효한 팰린드롬

Q. 주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다. 예제 1 # 입력 "A man, a plan, a canal: Panama" # 출력 true 예제 2 # 입력 "race a car" # 출력 false 풀이 1. 리스트로 변환 def isPalindrome(self, s: str) -> bool: """ 전처리 """ strs = [] for char in s: if char.isalnum(): # 영문자, 숫자만을 대상 strs.append(char.lower()) # 대소문자 구문 없으므로 소문자로 변환 # -> strs = ['a', 'm', 'a', 'n', 'a', 'p', 'l', 'a', 'n', 'a', # 'c', 'a', 'n..

[1-2] 파이썬

리스트 컴프리헨션 "홀수인 경우 2를 곱해 출력하라"는 조건에 대해서 List Comprehension을 사용하면 다음과 같이 간단히 코딩할 수 있다. [n * 2 for n in range(1, 10+1) if n % 2 == 1] List Comprehension을 사용하지 않을 경우 코드가 훨씬 길고 a라는 별도의 리스트 변수 또한 필요해진다. a = [] for n in range(1, 10 + 1): if n & 2: a.append(n * 2) print(a) 제너레이터 모든 변수를 메모리에 생성하지 않고, 생성 조건만을 가져 메모리에 대한 효율성을 얻을 수 있다. a = [n for n in range(1000000)] # List b = range(1000000) # Generator 위 ..

[1-1] 코딩 인터뷰

코딩 인터뷰를 위한 온라인 테스트 플랫폼 해커랭크 (https://www.hackerrank.com) 코딜리티 (https://www.codility.com) 리모트인터뷰 (https://www.remoteinterview.io) 프로그래머스 (https://programmers.co.kr) 백준 (https://www.acmicpc.net/) 리트코드 (https://leetcode.com/) 프로젝트 오일러 (https://projecteuler.net) 온라인 코딩 테스트의 사전 준비사항 - 코드 스니펫 준비하기 (GitHub Gist, https://gist.github.com/)

[Python] bisect

python에서 제공하는 표준 라이브러리인 bisect에 대해서 정리하겠습니다. bisect bisect는 이진 검색 알고리즘을 이용하여 입력받은 시퀀스를 검색하는 기능을 제공하는 함수 입니다. # bisect.bisect(a, x, lo=0, hi=len(a)) # 리스트 a에 x값이 들어갈 자리의 인덱스값을 반환합니다. temp = [1, 3, 4, 5] bisect.bisect(temp, 2) # 출력값 : 1 bisect_right, bisect_left bisect는 bisect_right와 동일하며, 이 두 함수는 리스트 a에 x와 동일한 값이 존재하면 해당 값의 뒷 인덱스 값을 반환합니다. bisect.bisect_right(temp, 3) # 출력값 : 2 하지만, bisect_left는 ..

[Python] 슬라이싱(slicing) 기본

파이썬에서 슬라이싱(slicing)이란, 연속적인 객체(리스트, 튜플, 문자열)들에 대해서 특정 범위를 지정 선택해서 부분 객체들을 가져오는 기법을 의미합니다. 즉 연속적인 객체의 일부분을 복사해서 가져온다고 생각하면 됩니다. 기본 형태 만약 temp라는 리스트가 있고 다음과 같은 값을 갖고 있다고 할 때, 아래와 같은 형태로 슬라이싱 할 수 있습니다. temp = [1, 2, 3, 4, 5] # 슬라이싱 기본 형태 # temp[start:end:step] start : 시작 위치 end : 끝 위치 (포함 x) step : stride라고도 하며 몇개씩 가져올지 정할 수 있습니다. (옵션) 예제 temp[1:] # [2, 3, 4, 5] temp[:-1] # [1, 2, 3, 4] temp[2:4] #..

[Python] 문자열 활용법 정리

파이썬에서 문자열을 활용하는 다양한 방법들 중 자주 사용되는 방법들에 대해서 정리해보도록 하겠습니다 s = "Python is Easy" s.upper() # 대문자로 변경 # PYTHON IS EASY s.lower() # 소문자로 변경 # python is easy s.split() # 공백 기준 문자열 나누기 # ['Python', 'is', 'Easy'] s.upper() # 공백 포함 문자열 나누기 # ['Python is Easy'] s_1 = '123' s_2 = 'abc' s_3 = s_1 + s_2 s_1.isdigit(), s_2.isdigit() # 숫자로만 구성되어 있으면 True, 아니면 False # True False s_1.isalpha(), s_2.isalpha() # 문자..

[Python] pickle (데이터 저장 및 불러오기)

이번 포스트에서는 정말 간단하게 python에 pickle을 활용하여 데이터를 저장하고, 저장된 데이터를 불러오는 코드를 알아보겠습니다. pickle은 파이썬의 모든 객체(object)에 대해서 있는 그대로 저장할 수 있는 모듈입니다. pickle은 객체를 바이너리 파일에 저장하기 때문에 아래와 같이 파일을 읽을 때 'wb', 'rb' 처럼 바이너리 형식을 사용해야 합니다. pickle.dump / pickle.load import pickle temp_dict = {'name': 'S', 'id': 1} # 데이터 저장 with open('filename.pkl', 'wb') as f: pickle.dump(temp_dict, f, protocol=pickle.HIGHEST_PROTOCOL) # 데이터..

[Python] Multiprocessing (프로세스 기반 병렬 처리)

프로그램의 실행 속도는 프로그래밍의 아주 중요한 요소입니다. Python에서 프로세스 기반의 병렬 처리를 통해 실행 속도를 향상 시킬 수 있는 방법에 대해서 알아보겠습니다. Python에서는 병렬 처리를 위해 multiprocessing 패키지를 제공합니다. multiprocessing에는 대표적으로 Pool과 Process가 있지만 이번 글에서는 Process에 대해서만 다루도록 하겠습니다. multiprocessing.process Process는 미리 정의한 함수를 하나의 프로세스에 할당하여 실행합니다. 이때, 각 프로세스마다 적당한 인자값을 할당하여 실행할 수 있습니다. [example code] import os from multiprocessing import Process def add_on..

반응형