본문 바로가기

Python

(29)
파이썬 함수 인자 *arg와 **kwargs 오늘은 파이썬 함수 인자인 *arg와 **kwargs이 왜 필요한지, 그리고 어떻게 사용하는지에 대해 알아보도록 하겠다. 일반적으로 파이썬 함수를 작성할 때, 아래와 같이 파라미터 개수를 지정해서 넘겨준다. def sample_func(name, sex): print(f'제 이름은 {name}이고, 성별은 {sex}입니다.') sample_func('brian', 'man') # 출력 결과 # 제 이름은 brian이고, 성별은 man입니다. 그런데 만약 호출하는 로직에서 몇 개의 파라미터를 넘겨줘야 할지 모르는 경우, 혹은 선택적으로 변수를 받을 수도 있는 경우에는 파라미터를 어떻게 지정해줘야 할까? 바로 이러한 경우에 사용하는 것이 *arg와 **kwargs 인자이다! 파이썬 함수 인자 *args에 대..
[Python Skill Up] 고급 리스트 기능 이번 포스팅에서는 파이썬을 활용한 고급 리스트 기능들에 대해 설명해 보도록 하겠다. 리스트 복사 vs 리스트 변수 복사얕은 복사 vs 깊은 복사리스트 함수 vs 리스트 메서드map, filter, reduce, lambda 함수언더스코어(_)의 기능1. 리스트 복사 vs 리스트 변수 복사 - 파이썬의 변수는 한 컬렉션을 제대로 복사하려면 추가 작업이 필요하다. a_list = [2, 4, 8] b_list = a_list b_list.append(100) a_list.append(200) b_list.append(1) print(a_list) # [2, 4, 8, 100, 200, 1] 출력 - 위 예시 코드를 보면 알 수 있듯이, 둘 중 한 변수의 값을 변경하면 다른 하나도 함께 변경된다. - 리스트 ..
[Python Skill Up] 자리 맞춤 메서드 파이썬에서 문자열 자리 맞춤을 위한 가장 기초적인 방법을 소개하도록 하겠다. (나 또한 zfill 메서드를 제외한 나머지 메서드들은 처음 봤는데, 알아두면 유익하게 써먹을 수 있을 것 같다) 1. ljust() 2. rjust() 3. center() 4. zfill() ljust(), rjust(), center() 메서드의 경우, 문자열 텍스트가 주어진 "길이"보다 짧다면 (각 메서드에 따라) 텍스트가 왼쪽, 오른쪽 혹은 가운데로 이동한다. ※ zfill()은 rjust()의 기능을 그냥 단순화한 것이 아니다. 아래 파이썬 코드의 "" 부분을 보면, zfill 메서드를 사용하면 "채우기_문자"로 넣어준 "0"이 숫자의 일부가 되며, "0"이 숫자와 기호 사이에 위치하는 것을 확인할 수 있다. 반면, ..
[KoNLPy 설치] Window10에서 KoNLPy 설치하기 (feat. 이제 삽질은 그만!! ^^) 이번 포스팅에서는 많은 분들이 애를 먹고 있는 문제 중 하나인 KoNLPy 패키지 설치에 관해 정리해보려 한다. 필자 또한 책 또는 구글에 나온대로 해당 패키지를 설치했지만 한 번에 제대로 설치되지 않았다... 그러던 중, Inflearn의 권철민님 강의를 수강하며 KoNLPy를 쉽게(?) 설치하는 방법에 대해 알게되었고, 이를 포스팅한다면 미래의 나를 포함한 많은 분들에게 도움이 될 것이라고 생각되기에 이번 포스팅을 작성하게 되었다. 자, 그럼 설치 과정을 단계별로 설명하도록 하겠다. 가장 먼저 해야할 것은 jpype1 모듈을 설치하는 것이다. 설치 방법은 다음과 같다. 1. Anaconda Prompt (Window10은 관리자 권한으로) 실행 2. conda install -c conda-forge..
[알고리즘_Programmers] 9주차 2번 문제 및 풀이 이번 포스팅에서는 "탑"이라는 문제에 대한 풀이를 진행하도록 하겠다. 우선 문제는 다음과 같다. 우선 문제 자체가 굉장히 길다. (딱봐도 읽기 싫게 생겼네...) 그래도 문제를 안 읽으면 풀 수가 없으니, 천천히 읽어보고 문제를 풀어보았다! ^^ (지난 번처럼 삽질을 안하도록 문제를 꼼꼼하게 읽었다) 문제 접근법을 생각해내는 것은 크게 어렵지 않았으므로, 머리 속으로 생각한 내용들을 천천히 코드로 구현해보았다. 먼저 신호가 오른쪽에서 왼쪽 방향으로 전해지므로 reversed()를 사용해서 주어진 heights 리스트를 역순으로 바꿔주었다. 그 다음, [(idx1, heights1), (idx2, heights2), ...]의 형태로 리스트를 만들어주기 위해 list comprehension을 사용하였다...
[알고리즘_Programmers] 9주차 1번 문제 및 풀이 이번 포스팅에서는 "멀리 뛰기"라는 문제에 대한 풀이를 진행해보도록 하겠다. 우선 문제는 다음과 같다. 이 문제는 n이 1 ~ 6인 경우의 결과 값들을 확인해보면, 쉽게 규칙을 발견할 수 있는 문제이다. n result 1 1 2 2 3 3 4 5 5 8 6 13 위 표의 결과 값들을 살펴보면, result 값들이 피보나치 수열의 형태를 띄고 있는 것을 알 수 있다. 따라서 피보나치 수를 구하는 코드를 구현해주면 문제는 쉽게 풀린다!! 처음에 피보나치 수를 구해주면 되는 쉬운 문제구나 하고, 코드를 입력해서 제출했는데 결과 값이 틀렸다고 나왔다. 너무 당황스러워서 "피보나치 수열을 사용해서 푸는 문제가 아닌가..?" 하는 생각이 들었고, 결국 순열과 조합을 사용한 방법으로 접근해보기까지 했다....(말 ..
[알고리즘_Programmers] 8주차 3번 문제 및 풀이 이번 포스팅에서는 프로그래머스의 "카펫"이라는 문제에 대한 풀이를 진행하도록 하겠다. 우선 주어진 문제는 다음과 같다. 이 문제는 결국 풀지 못했다...ㅜㅜ (접근법 자체가 안 떠올라서...) 그래서 다른 사람의 풀이를 참고해서 설명하도록 하겠다. 우선 문제를 어떻게 접근해서 풀어야 할지에 대해서 설명하겠다. 다음과 같이, 가로의 길이가 x이고 세로의 길이가 y인 카펫이 주어졌다고 생각해보자. 위 그림을 보면, x * y = brown + yellow 이고 (x - 2) * (y - 2) = yellow 인 것을 알 수 있다. 따라서 이 두 개의 방정식을 연립해서 풀면, 다음과 같은 식이 나오게 된다. 위 방정식의 해를 근의 공식을 사용해서 구해보면 다음과 같다. 이렇게 구해진 x, y 값들 중에서 더 ..
[알고리즘_Programmers] 8주차 2번 문제 및 풀이 이번 포스팅에서는 "최솟값 만들기"라는 문제에 대해서 풀이를 진행해보려 한다. 이번 문제도 지난 1번 문제와 마찬가지로 크게 어려운 문제는 아니었다. 우선 문제는 다음과 같다. 배열 A와 B가 주어질 때 누적된 합이 최소가 되도록 하려면, "(배열 A의 최솟값1 * 배열 B의 최댓값1) + (배열 A의 최솟값2 * 배열 B의 최댓값2) + ... " 이런 식으로 누적합을 구해주면 된다. 여기서 최솟값1은 모든 값들 중에서 최솟값을 의미하고, 최솟값2는 최솟값1을 제외한 모든 값들 중에서 최솟값을 의미한다. 최댓값도 동일하게 적용된다. 따라서 먼저 배열 A를 오름차순 정렬해주고, 배열 B를 내림차순 정렬해주었다. (동일한 index를 갖는 값들끼리 곱해주기 위해서) 그 다음, 배열 A와 B에서 동일한 in..