본문 바로가기

Python

(73)
[Python] 가장 큰 수, inf 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 코딩 테스트 문제등을 풀다 보면, 최솟값을 저장하는 변수에 아주 큰 값을 할당해야 할 때가 있다. 이때에 사용하기 좋은 것이 inf이다. 이 기능을 몰르는 사람들은(필자 포함) 다음과 같이 본인이 생각하는 임의의 큰수(99999등)을 할당한다. min_val = 99999 min_val > 100000000 # ? 위 방법은 비교할 데이터가 아주 큰 경우, 정상적으로 작동하지 않을 수 있다. (2번째 줄처럼) 파이썬이 제공하는 inf는 어떤 숫자와 비교해도 무조건 크다고 판정된다. min_val = float('inf') min_val > 10000000000 inf에는 음수 기호를 붙이는 것도 가능하다. max_val = f..
[Python] 두 변수의 값 바꾸기 - swap 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 보통 두 변수의 값을 바꿀 때 다음과 같이 값을 임시로 저장할 변수, temp를 이용해 두값 을 바꾼다. a = 3 b = 'abc' temp = a a = b b = temp 파이썬에서는 다음과 같이 한 줄로 두 값을 바꿔치기할 수 있다. a = 3 b = 'abc' a, b = b, a # 참 쉽죠?
[Python] flag OR for-else 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 자연수 5개를 받은 뒤 숫자를 차례로 곱해 나온 수가 제곱수가 되면 found를 출력하고 모든 수를 곱해도 제곱수가 나오지 않았따면 not found를 출력하는 코드이다. (곱해 나온 수의 제곱근이 정수이면 제곱수이다.) import math numbers = [int(input()) for _ in range(5)] multiplied = 1 flag = True for number in numbers: multiplied *= number if math.sqrt(multiplied) == int(math.sqrt(multiplied)): flag = False print('found') break if flag: print..
[Python] 2차원 리스트를 1차원 리스트로 만들기 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 코딩을 하다보면, 이차원 리스트를 일차원 리스트로 만들어야 할 때가 있다. 보통 다음과 같이 반복문을 이용해 리스트를 더해간다. my_list = [[1, 2], [3, 4], [5, 6]] answer = [] for i in my_list: answer += i print(answer) # [1, 2, 3, 4, 5, 6] 파이썬의 다양한 기능을 사용하면, for문을 사용하지 않고도 리스트를 이어붙일 수 있다. 1. sum 함수 answer = sum(my_list, []) 2. itertools.chain import itertools list(itertools.chain.from_iterable(my_list)) 3. ..
[Python] sequence type의 *연산 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 곱셉연산*를 통해 문자열을 반복할 수 있다. 예시1 'abc', 'abcabc', 'abcabcabc', 'abcabcabcabc ...' 과 같이 'abc'가 n번 반복되는 문자열 만들기 n = 어쩌고 answer = 'abc'*n 예시2 [123, 456, 123, 456, 123 ...] 과같이 123, 456이 n번 반복되는 리스트를 만들기 n = 어쩌고 answer= [123, 456]*n
[Python] 알파벳 출력하기 - string 모듈 a부터 z까지의 소문자를 가져오라고 하면 보통 'abcdefg ...."와 같이 손수 알파벳을 입력한다. 파이썬에서는 이런 데이터를 상수(constants)로 정의해놓았다. import string string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ string.ascii_letters #대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ string.digits # 숫자 0123456789 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다.
[Python] [Str 다루기] 문자열 정렬하기 - ljust, center, rjust 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 문자열을 좌측/가운데/우축 정렬할 때 보통 for문을 이용해 기존 string에 공백문자(' ')를 여러 번 붙이는 번거로운 일을 다음과 같이 한다. ### 우측 정렬 예 s = '가나다라' n = 7 answer = '' for i in range(n-len(s)): # 문자열의 앞을 빈 문자열로 채우는 for 문 answer += ' ' answer += s 하지만 파이썬에서는 ljust, center, rjust와 같은 string의 메소드를 사용해 코드를 획기적으로 줄일 수 있다. s = '가나다라' n = 7 s.ljust(n) # 좌측 정렬 s.center(n) # 가운데 정렬 s.rjust(n) # 우측 정렬
[Python] [정수 다루기] n진법으로 표기된 string을 10진법 숫자로 변환하기 이 글은 프로그래머스의 파이썬을 파이썬답게 강의를 수강하고 작성하는 글입니다. 알고리즘 문제에서 자주 등장하는 진법 변환 문제를 해결할 때 보통 for문을 이용해 숫자를 곱해가며 문제를 해결한다. num = '3212' base = 5 answer = 0 for idx, i in enumerate(num[::-1]): answer += int(i) * ( base ** idx ) # base ** idx == pow(base, idx) 하지만 파이썬에서는 파이썬의 int(x, base = 10)함수가 진법 변환을 지원한다. 이 기본적인 함수를 잘 사용하면 코드를 짧게 작성할 수 있고, 또 시간을 절약할 수 있다. (x에는 문자열만 들어갈 수 있다.) num = '3212' base = 5 answer =..