간단히 어떤 것들을 필수적으로 알면 좋을지 설명하겠다.
a = 1e9라 하면
print(a) 할 대 1000000000.0이 된다
그런데 int 붙이면 .0이 사라진다
a = 75.25e1
print(a) → 752.5
a = 3954e-3
print(a) → 3.954
실수 값을 제대로 비교하지 못해서 원하는 결과를 얻지 못할 수도 있다
round()함수를 이용하면 된다
ex) 123.456 을 소수 셋 째 자리까지
round(123.456, 2) → 123.46
파이썬에서 기본적으로 나누면 실수형으로 반환한다
다양한 로직 설계할 때 나머지 연산자 이용해야 할 경우 많음 %. ex) 짝수 홀수
몫만 얻을려면 //
리스트 자료형
여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
c나 자바의 배열의 기능 및 연결리스트와 유사한 기능 지원.
인덱스는 0부터 시작
대괄호 안에 원소를 넣어 초기화하며, 쉼표(,)로 원소 구분
a = [1,2,3,4,5,6,7,8,9]
print(a[3]) # 4번째 원소만 출력
#크기가 n이고, 모든 값이 0인 1차원 리스트 초기화
n = 10
a = [0] * n
print(a)
인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱이라한다
인덱스 값은 양의 정수와 음의 정수 모두 사용 가능
음의 정수 넣으면 원소를 거꾸로 탐색
리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱 이용
대괄호 안에 콜론을 넣어서 시작 인덱스와 끝 인덱스를 설정
끝 인덱스는 실제보다 1을 더 크게 ex) a = [1,2,3,4,5] print(a[0:3]) → 1,2,3 #0번,1번,2번까지만 나옴
리스트 컴프리헨션
리스트를 초기화하는 방법 중 하나
대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화 할 수 있다.
array = [i for i in range(10)]
print(array)
#결과 값 -> [0,1,2,3,4,5,6,7,8,9]
이렇게 단 한 줄 만에 한 번에 초기화 가능.
array = [i for i in range(20) if i % 2 == 1] #0부터 19까지의 수 중에서 홀수만 포함하는 리스트
print(array)
# [1,3,5,7,9,11,13,15,17,19]
array2 = [i * i for i in range(1,10] #1부터 9까지의 수들의 제곱 값을 포함하는 리스트
print(array2)
2차원 리스트를 초기화할 때 효과적으로 사용될 수 있다.
특히 N * M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용
n = 4
m = 3
array = [[0] * m for _ in range(n)]
print(array)
# 결과 -> [[0,0,0], [0,0,0], [0,0,0], [0,0,0]]

이런 식으로.
반복문 사용할 때 언더바 자주 사용하는 이유는 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용

리스트 관련 함수 중 많이 쓰이는 함수

예제로 리스트 컴프리헨션과 메서드를 사용하여 리스트에서 특정 값을 가지는 원소를 모두 제거해보자
a = [1,2,3,4,5,5,5]
remove_set = {3,5}
result = [i for i in a if i not in remove_set] #3,5가 아닌 것들만 가져와라
print(result)
#결과값 -> [1,2,4]
큰따옴표를 문자 안에서 쓰려면 백슬래쉬 가능
“hello world \”hello\”?” → hello world “hello”?
#문자열 연산
a = "Hello"
b = "World"
print(a + " " +b)
#Hello World
a = "String"
print(a * 3)
#StringStringString
a = "ABCDEF"
print(a[2:4])
#CD
그러나 특정한 위치의 그 문자값을 바꾸는 건 불가.
튜플
리스트와 유사하지만 문법적 차이가 있다
튜플은 한 번 선언된 값 변경 불가
리스트는 대괄호, 튜플은 소괄호
튜플은 리스트에 비해 공간 효율적
그러니까 접근할 땐 리스트와 같이 접근 가능함.
a = (1,2,3,4)
print(a[1])
# 2
print(a[0:2])
# 1,2
변경은 안된다.
튜플을 왜 사용할까?
서로 다른 성질의 데이터 묶어서 관리해야 할 때
최단 경로 알고리즘에선 (비용, 노드 번호)의 형태로 튜플 자료형 자주 사용
데이터의 나열을 해싱의 키 값으로 사용해야 할 때
튜플은 변경 불가. 리스트와 다르게 키 값으로 사용 가능
리스트보다 메모리를 효율적으로 사용해야 할 때
set과 list의 차이
- 순서: 리스트(List)는 원소들의 순서가 있으며, 인덱스를 통해 각 원소에 접근할 수 있습니다. 반면에 셋(Set)은 원소들 간에 순서가 없다.
- 중복: 리스트는 중복된 원소를 포함할 수 있지만, 셋은 중복된 원소를 허용하지 않는다. 셋은 고유한 값들의 집합을 표현한다.
- 가변성: 리스트는 가변(mutable)하며, 삽입, 삭제, 수정 등의 연산을 통해 내용을 변경할 수 있다. 반면 셋(set)은 불변(immutable)하며, 한 번 생성된 후에는 원소를 변경할 수 없다. 다만, 원소를 추가하거나 제거할 수는 있다.
- 속도: 일반적으로 셋은 중복을 제거해야 하기 때문에 리스트보다 더 빠르게 작업을 수행할 수 있다. 특히, 멤버십 검사나 중복 제거와 같은 연산에서 셋은 리스트보다 효율적이다.


import sys
data = sys.stdin.readline().rstrip()
print(data)
보통 print()하면 줄바꿈이 되는데 end를 써서 공백문자를 넣어주면 연결되어서 나온다
a = 1
b = 2
print(a,b)
print(7, end="")
print(8, end=" ")
print(9)
#결과값
# 1 2
# 78 9
파이썬엔 f-string도 지원한다
중괄호 안에 변수명 기입해서 문자열과 정수를 함께 넣을 수 있음. 앞에만 접두사 ‘f’붙이면 됨
answer = 7
print(f"정답은 {answer}입니다.")
#정답: 7
조건문
x = 10
if x > 10:
print("x는 10보다 큽니다.")
elif x == 10:
print("x는 10입니다.")
else:
print("x는 10보다 작습니다.")
반복문
for 반복문:
- 리스트나 다른 반복 가능한 객체(iterable)를 순회하는 경우:
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
2. 특정 범위(range)를 순회하는 경우:
for i in range(5):
print(i)
3. 반복문과 함께 else 블록을 사용하는 경우:
for i in range(3):
print(i)
else:
print("반복문이 끝났습니다.")
while 반복문:
- 특정 조건이 충족될 때까지 반복하는 경우:
x = 0
while x < 5:
print(x)
x += 1
2. 무한 반복문을 사용하는 경우 (주의: 이는 제어를 신중하게 해야 한다. 종료 조건을 명확히 정해야 한다):
x = 0
while True:
print(x)
x += 1
if x == 5:
break # 반복문 종료 조건
3. while 반복문과 함께 else 블록을 사용하는 경우:
x = 0
while x < 3:
print(x)
x += 1
else:
print("반복문이 끝났습니다.")
4. 이중 반복문을 사용하여 이차원 배열의 요소 출력
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
for row in matrix:
for item in row:
print(item, end=" ")
print() # 각 행을 구분하기 위한 줄 바꿈
함수
함수란?
특정한 작업을 하나의 단위로 묶어 놓은 것
함수를 사용하면 불필요한 소스코드의 반복을 줄일 수 있다.
프로그램에선 똑같은 코드가 반복적으로 사용되어야 할 때가 많다
함수를 사용하면 소스코드의 길이를 줄일 수 있다.
매개변수: 함수 내부에서 처리할 변수
반환 값: 함수에서 처리 된 결과 반환
def 함수명(매개변수):
실행할 소스코드
return 반환 값
함수 예시 코드들
- 인자 없이 값을 반환:
def greet():
return "Hello, world!"
print(greet())
2. 인자를 받아서 값을 반환:
def add(x, y):
return x + y
result = add(3, 5)
print(result)
3. 인자를 받아서 값 반환 x:
def greet(name):
print("Hello, " + name + "!")
greet("Alice")
4. 기본 값을 가진 인자를 가진 함수:
def greet(name="world"):
print("Hello, " + name + "!")
greet()
greet("Alice")
5. 가변 인자를 받는 함수:
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
print(sum_numbers(1, 2, 3, 4, 5))
6. 키워드 인자를 받는 함수:
def greet(name, greeting="Hello"):
print(greeting + ", " + name + "!")
greet(name="Alice")
greet("Bob", greeting="Hi")
7. 리턴문 없는 함수
def say_hello(name):
print("Hello, " + name + "!")
say_hello("Alice")
8. 리턴 값이 여러 개인 함수(튜플로 반환):
def min_max(numbers):
return min(numbers), max(numbers)
nums = [3, 1, 4, 1, 5, 9, 2]
min_num, max_num = min_max(nums)
print("최소값:", min_num)
print("최대값:", max_num)
람다 표현식
특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징. 함수의 이름도 없음.
#원래 함수
def add(a,b):
return a + b
print(add(3,7)) #10
#람다함수 사용
print((lambda a,b: a + b)(3,7)) #10
#lambda 뒤의 a,b가 각각 변수. a+b는 계산. 3과 7을 a,b 자리에 각각 넣는 것을 한 줄로
람다 표현식 예제(여러 개의 리스트에 적용)
list1 = [1,2,3,4,5]
list2 = [7,4,7,8,6]
result = map(lambda a,b: a+b, list1, list2)
print(list(sorted(result)))
실전에서 유용한 표준 라이브러리

사진 출처: 유튜브 동빈나
'Algorithm > 알고리즘' 카테고리의 다른 글
[백준/자바] 1260번 - DFS와 BFS 구현하기 (3) | 2025.01.17 |
---|---|
[백준/자바] 1157 - 단어 공부 (1) | 2025.01.16 |
[백준/파이썬] 28278 (0) | 2024.11.10 |
함수와 재귀함수(Python) (2) | 2024.05.20 |
복잡도 (1) | 2024.04.22 |