정글 week01에 알고리즘 문제를 풀면서 정리했던 내용들을 공유해본다.
import sys와 input=sys.stdin.readline은 Python에서 입력을 빠르게 처리하기 위한 일반적인 방법
import sys input=sys.stdin.readline
평균 함수 라이브러리
from statistics import * ave = mean(a[1:])
수학 함수 라이브러리
import math
숫자 입력변수
7
a = int(input())
7
공백으로 들어오는 숫자 입력변수
1 5
a, b = map(int, input().split())
5
1
arr 숫자 입력 변수
1 10 4 9 2 3 8 5 7 6
arr = list(map(int, input().split()))
[1, 10, 4, 9, 2, 3, 8, 5, 7, 6]
줄바꿈으로 들어오는 숫자 입력
1
5
7arr = [int(input()) for i in range(3)]
[1, 5, 7]
줄바꿈, 공백으로 들어오는 숫자 입력
0 3
1 4list = [list(map(int, input().split())) for i in range(2)]
[[0, 3], [1, 4]]
n번들어오는 숫자입력
2
6
4
-2
-3plus_arr = [] minus_arr = [] for _ in range(5): data = int(input()) if data >= 0: plus_arr.append(data) else: minus_arr.append(data) print(plus_arr) print(minus_arr)
[2, 6, 4]
[-2, -3]
strip()
Python에서
strip()
을 이용하면 문자열에서 특정 문자를 제거할 수 있습니다. Java 등의 다른 언어들도strip()
을 제공하며, 기능은 모두 비슷합니다.
strip([chars])
: 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.lstrip([chars])
: 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.rstrip([chars])
: 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.
자동 줄바꿈
print(1, 2, 3, sep='\n')
출력 포멧팅
- %s : 문자열 ◀ 많이 사용
- %d : 정수 ◀ 많이 사용
- %c : 문자 1개
- %f : 부동 소수
- %o : 8진수
- %x : 16진수
- %% : '%' 자체를 출력
print("김파이의 점수는 %d 점 입니다." % 85)
print("%s의 점수는 70 점 입니다." % "이포맷")result
김파이의 점수는 85 점 입니다.
이포맷의 점수는 70 점 입니다.print("%10s 왼쪽에 공백10개" %"안녕!")
print("%-10s 오른쪽에 공백10개" %"안녕!")
print("%0.3f 소수점 포현" % 3.141592)소수점 인식
print("%0.3s 소수점 포현" % 3.141592)
문자열 인식
print("%10.3f 소수점 포현" % 3.141592)
result
안녕! 왼쪽에 공백10개
안녕! 오른쪽에 공백10개
3.142 소수점 포현
3.1 소수점 포현
3.142 소수점 포현
원하는 소수점까지 출력
Python에서 문자열 포맷팅을 사용하여 소수점 이하 세 자리까지 표시되는 문자열을 출력하는 예시
print(f"{result:.3f}%")
예를 들어, result 값이 0.123456이라면 출력은 "12.346%"
n개 출력하기
print('*'*(i))
print(a, end=" ")
end 매개변수는 출력 후 끝에 추가되는 문자열을 지정합니다. 기본적으로 print() 함수는 출력 후 개행 문자(\n)를 추가하여 다음 줄로 넘어갑니다. 하지만 end=" "와 같이 설정하면 출력 후 끝에 공백 문자(" ")를 추가하게 됩니다. 따라서, 다음에 출력되는 내용이 같은 줄에 이어서 출력됩니다. 예를 들어:
print("Hello", end=" ") print("World") 출력 결과: Copy code Hello World
print("a", "b", "c", sep="-")
sep 매개변수는 출력할 값들 사이에 삽입되는 구분자를 지정합니다. 기본적으로 print() 함수는 값들을 공백 문자(" ")로 구분하여 출력합니다. sep=' '와 같이 설정하면 값들 사이에 공백 문자 대신 지정한 구분자가 삽입됩니다. 예를 들어:
print("a", "b", "c", sep="-") 출력 결과: a-b-c
print(arr.index(a))
리스트 arr에서 값이 a인 요소의 인덱스를 출력하는 코드입니다.
index() 메서드는 리스트나 문자열에서 특정 요소의 인덱스를 반환하는 함수입니다. arr.index(a)는 리스트 arr에서 값이 a인 요소의 인덱스를 찾아서 출력하는 것을 의미합니다.
예를 들어, 다음과 같이 코드를 작성했을 경우를 생각해봅시다:arr = [1, 2, 3, 'a', 4, 5] a = 'a' print(arr.index(a))
위의 코드에서 arr은 [1, 2, 3, 'a', 4, 5]라는 리스트이고, a는 'a'라는 문자열입니다. arr 리스트에서 값이 'a'인 요소는 3번째 위치에 있기 때문에 index() 메서드는 3을 반환하고, print() 함수는 3을 출력합니다.
만약 리스트 arr에 값이 a인 요소가 존재하지 않는다면, index() 메서드는 ValueError 예외를 발생시킵니다. 이는 찾고자 하는 값이 리스트에 존재하지 않는 경우입니다.
list 출력시 구분자 변경
print() 함수의 sep 매개변수를 활용할 수 있습니다. sep 매개변수는 출력할 요소들 사이에 삽입될 구분자를 지정하는 역할을 합니다.
my_list = [1, 2, 3, 4, 5] # 쉼표로 구분된 기본 출력 print(my_list) # 출력: [1, 2, 3, 4, 5] # 공백으로 구분된 출력 print(*my_list) # 출력: 1 2 3 4 5 # 대시(-)로 구분된 출력 print(*my_list, sep='-') # 출력: 1-2-3-4-5
직관적으로 리스트를 생성하는 방법
"[", "]"로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성
참고) 중괄호 "{" "}"로 둘러쌓게 되면 집합 컴프리헨션(Set Comprehension)
[ <표현식> for <변수명> in <시퀀스> if <조건>]
예제:
[i for i in range(5) if i%2==0 if i%4==0]
[i if i%2==0 else 'odd' for i in range(5)]
[(i,j) for i in range(2) for j in range(3)]
곱하기 : a*b
몫: a//b
나머지: a%b
반올림: round(실수,n)
올림 : math.ceil(i)
내림 : math.floor(i)
버림 : math.trunc(i)
문자열이 정수형으로 변환이 가능한 경우를 체크합니다.
str_variable = "123"
if str_variable.isdigit():
int_variable = int(str_variable)
print(f"변환된 정수형 변수: {int_variable}")
else:
print("문자열이 숫자로 이루어져 있지 않습니다.")
isalpha()
알파벳인지 확인하는 함수
문자->아스키코드 : ord()
ord() 함수는 문자의 아스키 코드 값을 반환합니다.
문자를 인자로 받아 해당 문자의 아스키 코드 값을 반환합니다.
예를 들어, ord('A')는 문자 'A'의 아스키 코드 값인 65를 반환합니다.
ord() 함수는 유니코드 문자에도 적용할 수 있습니다.
아스키코드 -> 문자: chr()
chr() 함수는 아스키 코드 값을 문자로 변환합니다.
아스키 코드 값을 인자로 받아 해당 아스키 코드에 해당하는 문자를 반환합니다.
예를 들어, chr(65)는 아스키 코드 값이 65인 문자 'A'를 반환합니다.
chr() 함수는 0부터 1,114까지의 범위 내의 정수를 입력으로 받습니다. 이 범위를 벗어나는 값을 입력하면 ValueError 예외가 발생할 수 있습니다.### 아스키 코드 값을 문자로 변환 char = chr(65) print(char) # 출력: 'A' ### 문자를 아스키 코드 값으로 변환 code = ord('A') print(code) # 출력: 65
문자열 순서 바꾸기
a,b = map(str, input().split()) c=[a[::-1],b[::-1]]
sorted(arr)
arr 배열을 변형하지 않고, arr 배열이 오름차순으로 정렬된 새로운 배열을 반환한다.
arr.sort()
arr 배열을 오름차순으로 변형하고 반환하지는 않는다.
arr = [4, 2, 7, 1, 5] arr.sort() print(arr) =>[1, 2, 4, 5, 7]
arr.sort(reverse=True)
arr = [4, 2, 7, 1, 5] arr.sort(reverse=True) print(arr) =>[7, 5, 4, 2, 1]
lambda정렬
array.sort(key = lambda x:x[0])
▷ key 인자에 함수를 넘겨주면 우선순위가 정해짐.
c = sorted(a, key = lambda x : x[0]) c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)] d = sorted(a, key = lambda x : x[1]) d = [(3, 0), (5, 1), (0, 1), (1, 2), (5, 2)]
▷ 비교할 아이템이 요소가 복수 개일 경우, 튜플로 우선순위를 정해줄 수 있다.
▷ -를 붙이면, 현재와 반대차순으로 정렬된다.arr.sort(key=lambda x:-x) e = sorted(a, key = lambda x : (x[0], -x[1])) => [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]
f = sorted(a, key = lambda x : -x[0]) => [(5, 1), (5, 2), (3, 0), (1, 2), (0, 1)])
▷ 뒤에 문자 순 정렬
s = ['2 A', '1 B', '4 C', '1 A'] s.sorted(s, key=lambda x: (x.split()[1], x.split()[0])) => ['1 A', '2 A', '1 B', '4 C']
a_list = ['a', 'b', 'd', 'd', 'b','s'] a_counter = Counter(a_list).most_common() => [('b', 2), ('d', 2), ('a', 1), ('s', 1)]
문자 역순(아스키 값 이용)
sorted(a_counter, key=lambda x: (-x[1], -ord(x[0]))) => [('d', 2), ('b', 2), ('s', 1), ('a', 1)]
map 람다 표현식
▷ list(map(lambda x: x , list ) 표현식
list(map(lambda x: x+10, [1,2,3])) => [11, 12, 13]
filter()
조건식의 boolean 값이 True 참인 요소만 반환한다.
a = [8, 4, 2, 5, 2, 7, 9, 11, 26, 13] result = list(filter(lambda x : x > 7 and x < 15, a)) => [8, 9, 11, 13]
reduce() 표현식
reduce() 는 값을 누적시킨다.
( reduce는 functools 모듈을 불러와야 사용가능 )from functools import reduce t = [47, 11, 42, 13] result = reduce(lambda x, y : x + y, t) => 113
replace("")
함수는 문자열 내의 모든 letter를 빈 문자열로 대체하므로, letter가 여러 번 등장하더라도 모두 제거됩니다.def solution(my_string, letter): return my_string.replace(letter, "") # 예시 테스트 print(solution("Hello World", "o")) # 출력: Hell Wrld
단어정렬
lst = list(set(lst)) # 중복 제거 lst.sort(key= lambda x: (len(x),x)) #글자수로 정렬
set 사용: set은 중복을 허용하지 않는 특성을 가지기 때문에 리스트를 set으로 변환하면 중복이 제거됩니다. 이후에 다시 리스트로 변환하면 중복이 없는 리스트가 됩니다.
my_list = [1, 2, 2, 3, 4, 4, 5] unique_list = list(set(my_list)) print(unique_list) # 출력: [1, 2, 3, 4, 5]
''.join(리스트)를 사용하면 매개변수로 들어온 리스트의 요소들을 하나의 문자열로 합쳐서 반환할 수 있습니다.
리스트에 포함된 문자들을 하나의 정수로 합치는 법
lst = ['a', 'b', 'c'] print(''.join(lst)) result 'abc'
리스트에 포함된 숫자들을 하나의 정수로 합치는 법
def concatenate_numbers(lst): concatenated = int(''.join(map(str, lst))) return concatenated # 예시 사용 my_list = [1, 2, 3] result = concatenate_numbers(my_list) print(result) # 출력: 123