split()과 split(" ")의 차이 s = "Hello World Everyone" print(s.split()) # ['Hello', 'World', 'Everyone'] print(s.split(' ')) # ['Hello', 'World', '', '', 'Everyone'] 프로그래머스 이상한 문자 만들기를 풀다가 신기한 것을 발견했다. split()을 사용하면 길이에 상관없이 공백을 모두 제거하여 분리하고, split(' ')을 사용하면 공백 한 개마다 분리한다고 한다. 문제 조건에서 공백이라는 것이 개수에 상관없는 공백인지, 공백 한 개(또는 특정 개수) 인지 구분하여 사용하는 것이 필요하다는데, 말장난 같기는 하지만 알아둬서 나쁠 건 없을 것 같다. 어쨌든 요구사항에 맞춰 구현하는 것..
python
제목이 곧 내용의 전부인데, 더 자세한 설명이 필요할 수도 있을 것 같아서 도움 받은 블로그와 공식 문서를 첨부하였음 참고문서 https://blog.hwahae.co.kr/all/tech/6662 Python3.6 부터는 Dict가 순서를 기억한다. – 화해 블로그 | 기술 블로그 Python3.6 화해 개발팀에서는 닥블(닥치고 블로그)이라는 소모임을 운영하고 있습니다. 최근 닥블 활동으로 화해팀의 백엔드 플랫폼에서 사용 중인 Python 딕셔너리에 대해 새로 알게 된 내용을 정 blog-wp.hwahae.co.kr https://docs.python.org/ko/3/library/stdtypes.html#dict Built-in Types The following sections describe th..
bisect 이거 없어도 괜찮을 거 같다는 고집이 있었기 때문에 따로 사용하고 있지는 않았는데, 생각보다 편리한 거 같다. 새로운 것에 대한 거부감을 줄이자. bisect_left, bisect_right는 bisect 라이브러리에서 요긴하게 쓰이는 함수로, 시간복잡도는 O(logN)이라고 한다. 이 함수는 이진탐색을 통해 리스트에서 원하는 값의 인덱스를 찾아준다고 한다. 아래 코드를 통해서 이해해보자. from bisect import bisect_left, bisect_right # bisect 라이브러리에서 가져온다 list = [1,1,1,1,1,2,3,4,5,6,6,6,8,9,9,9] # 반복되는 수가 있는 정렬된 리스트 list_2 = [42,5,6,8,1,57,98,4] # 무작위로 있는 리..
return 함수에서 return은 크게 두 가지 역할을 한다. 1. 결과값 반환 return은 결과값을 돌려주는 명령어로, 함수에서는 결과값을 return으로만 받을 수 있다. 만약 결과값이 없다면 None이 출력된다. def plus_one(a): return a+1 print(plus_one(5)) # 6 def plus_two(a): a+2 print(plus_one(5)) # None 2. 함수를 빠져나가는 기능 return은 함수를 종료시키고 싶을 때 사용할 수 있다. def hello(a): if a == "fxxking": return print(f'Hello {a} World!') hello('happy') # Hello happy World! hello('fxxking') # 실행되지 ..
None None은 값이 없다는 뜻을 가진 데이터이다. 존재하지 않음을 알려주는 값이라고 생각하면 편할 듯. None이 반환되는 대표적인 경우 1. 함수가 반환값을 가지고 있지 않을 때 def plus(a,b): a+b print(1,2) # None 2. 무언가를 검색했을 때 해당 값을 찾을 수 없는 경우
코드 n, m = map(int, input().split()) lenseon = [int(input()) for i in range(n)] start = 1 end = max(lenseon) result = 0 while(start
자료구조 이용 import sys input = sys.stdin.readline n = int(input()) # 시간을 줄여야 하므로 list 사용하기보다 dictionary 자료형 이용 num_count = {} for card in map(int,input().split()): if card in num_count: num_count[card] += 1 else: num_count[card] = 1 m = int(input()) ans = [] for i in map(int, input().split()): ans.append(num_count[i] if i in num_count else 0) print(*ans) 이분탐색 라이브러리(bisect) 이용 from bisect import bise..
이진탐색 이진탐색은 정렬되어 있는 리스트에서 탐색 범위를 절반씩 줄여가며 데이터를 탐색하는 방법이다. 시작점 끝점을 이용해 탐색범위를 결정한다. 단계마다 탐색 범위를 2로 나누는 것과 동일하므로 연산횟수는 logn에 비례한다. O(logN)을 보장해준다. 이진탐색은 위치를 나타내는 변수 3개를 이용한다. 시작점, 중간점, 끝점 -> 중간점이 실수인 경우, 버림한다. 중간값에 있는 데이터와 찾고자하는 값을 비교한 후, 크냐 작으냐에 따라 중간점 + 1, 중간점 - 1 값을 시작점 또는 끝점으로 변경한 후 다시 중간점을 찾는다. 이후 값을 찾거나 탈출조건에 해당할 때까지 위 과정을 반복한다. 구현 방법 반복문, 재귀함수 기억해야 할 것 이진탐색은 정렬된 리스트에서만 사용가능한 알고리즘이다. 따라서 이진탐색을..
진수 변환기 2진수, 8진수, 16진수 등으로 변환해주는 파이썬 내장함수가 있긴 하지만, 7진수나 24진수 등 여러 진수로 바꿀 필요성이 있을 때 사용하면 좋을 코드다. n진수를 만드는 원리만 알면 코드로 변환하기는 쉽다. n진수 만들기 2진수를 예로 들자. 어떤 수를 2로 더 이상 나눠지지 않을 때까지 (몫이 0이 될 때까지) 나눈다. 그 후 아래에서부터 나머지를 쭉 쓰면 2진수 변환이 끝난다. 이는 n이 모든 자연수일 때 성립한다. 이를 코드로 구현해보자. 진수변환기 파이썬 코드 def jinsu(n,m): damn = [] while True: if n//m == 0: damn.append(n) break damn.append(n%m) n //= m damn.reverse() return int("..
Set set(집합 자료형)의 특징은 크게 2개가 있다. 1. 중복을 허용하지 않는다. 2. 순서가 없다. 중복을 허용하지 않아서 중복을 제거하는 용도로 사용할 수 있다. 또 순서가 없기 때문에 인덱싱과 슬라이싱을 지원하지 않는다. 중복과 순서에 대한 특성을 사용하지 않을 때는 list보다는 set 자료형을 사용하는 것이 시간 절약에 좋다. 리스트는 인덱스 0부터 n까지 일일이 검사를 해야하므로 시간복잡도가 O(n) 이고, set은 O(1)이라고 한다. => set 자료형을 사용하면 탐색시간을 줄여준다. 백준 1920번 문제가 대표적이다. a = int(input()) b = set(map(int, input().split())) c = int(input()) d = list(map(int, input(..