파이썬 조건문, 반복문, 함수 및 라이브러리

seoyeon·2023년 4월 12일
0

코딩테스트 python

목록 보기
4/11
post-thumbnail

파이썬 기본 입출력

표준 입력

  • input() : 한줄의 문자열 입력
  • map() : 리스트 모든 원소에 각각 특정한 함수 적용할때

공백을 기준으로 구분된 데이터 입력받을 때

# 입력 받은 후 공백 기준으로 구분하고, 원소를 정수형으로 바꿔주고 list형으로 만들어주기
list(map(int, input().split()))

공백 기준으로 구분된 데이터 개수가 많지 않을 때(정해진 양)

# 데이터 3개 들어올때
a, b, c = map(int, input().split());
print(a, b, c)
# 데이터의 개수 입력
n = int(input())

# 각 데이터를 공백을 기준으로 구분하여 입력
data = list(map(int, input().split()))

data.sort(reverse=True)
print(data)

# 65 90 75 34 99 => 입력
# [99, 90, 75, 65, 34] => 출력

빠르게 입력

  • sys.stdin.realine() rstrip() => 줄바꿈 기호 제거

표준 출력

  • print()함수
  • 기본 줄바꿈 => 줄 바꿈 원치 않는경우! 'end' 속성 사용

f-string

  • 문자열 앞에 f 붙여서 사용
a=1
b=2
print(a, b)
print(7, end=" ")
print(8, end=" ")

answer = 7
# 정수형 문자열로 바꾼 후 + 연산자 사용
print("정답 : " + str(answer) + "입니다.")

# f-string
print(f"정답은 {answer}입니다.")

조건문과 반복문

조건문

x=15;

if x>=10:
    print("x>=10")
if x>=0:
    print("x>=0")
if x>=30:
    print("x>=30")

코드의 블록을 들여쓰기로 지정!!

  • tab, 스페이스 4개
x=15;

if x>=10:
    print("x>=10")
if x>=0:
    print("x>=0")
if x>=30:
    print("x>=30")
    
score = 85;
# 들여쓰기로 코드 블록 구분
if score>= 70:
    print('성적 70 이상')
    if score >= 90:
        print('우수한 성적')
else:
    print('성적 70 미만')
    print('분발할것')

조건문 기본형태

  • if ~ elif ~ else

반복문

while

x=10

while x>5:
	print(x)

for in문
in 뒤에 오는 데이터에 포함되어있는 원소를 첫번째 인덱스부터 차례대로 방문

array = [1, 2, 3, 4, 5]

for x in array:
	print(x)

for range문

  • 연속적인 값을 차례대로 순회할 때
  • range(시작 값, 끝값+1)
result = 0

# i는 1부터 9까지의 모든 값을 순회
for i in range(1,10):
	result += i

print(result)

continue

  • 반복문에서 남은 코드의 실행 건너뛸 때 continue를 사용
result = 0

# i는 1부터 9까지의 모든 값을 순회
for i in range(1,10):
	if i % 2 == 0:
    	continue
	result += i

print(result)

break

  • 반복문을 즉시 탈출하고자 할 때
i = 1

while True:
	print("현재 i의 값:", i)
    if i == 5:
    	break
    i+=1
  • 간단한 예제
scores = [90, 85, 77, 65, 97]
cheating_student_list = {2, 4}

# cheating_student_list 리스트에 있는 점수 건너뛰기
for i in range(5):
	if i+1 in cheating_student_list:
    	continue
	if scores[i] >= 80:
    	print(i+1, "번 학생은 합격입니다.")

구구단

for i in range(2, 10):
	for j in range(1, 10):	
    	print(i, "X", j, "=", i*j)
    print()

함수

  • 함수 형식
def func1(a):
	print(a)
    return 0



result = subtract(3,7) 

#result => -4
  • 전역변수

a=0

def func():
	global a
    a += 1

for i in range(10):
	func()
    print(a)
  • 여러개의 반환 값

람다 표현식

(->이해가 잘 안됨, 다시 공부하기)

print((lambda a, b: a+b)(3,7))

array = [('홍길동', 50), ('이순신', 32), (배서연, 74)]

def my_key(x):
	return x[1]

print(sorted(array, key=my_key))
print(sorted(array, key=lambda x: x[1]))

파라미터 저장

def add(a, b):
	print(a+b)
    
add(b=3, a=7)

람다 예시 : 여러개의 리스트에 적용

list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]

result = map(lambda a,b: a+b, list1, list2)

print(list(result))

라이브러리

  • 내장함수 : 기본입출력함수 ~ 정렬함수까지 기본적인 함수제공
  • itertools : 반복되는 형태의 데이터를 처리할때 유용한 기능 제공 => 순열, 조합 라이브러리
  • heapq : 힙 자료구조 제공 => 우선순위 큐
  • bisect : 이진 탐색
  • collections : 덱(deque), 카운터(counter)등
  • math : 팩토리얼, 제곱근, 최대공약수, 삼각함수, 파이 등
# sum() => 합
result = sum([1,2,3,4,5])
print(result)

# min(), max() => 최대 최소
min_result = min(7,3,5,2)
max_result = max(7,3,5,2)
print(min_result, max_result)

# eval() => 문자열을 식으로
result = eval("(3+5)*7")
print(result)

# sorted() => 정렬
result = sorted([9,1,8,5,4]) # 오름차순
reverse_result = sorted([9,1,8,5,4], reverse=True)  # 내림차순
print(result)
print(reverse_result)

# sorted() with key
array = [('홍길동, 50'), ('이순신', 32), ('배서연', 74)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)

순열과 조합

  • 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 나열
  • 조합 : 서로 다른 n개에서 순서 상관x 서로 다른 r개를 선택
    => 거꾸로 뒤집는거 안됨

permutations)

from itertools import permutations

data = ['A', 'B', 'C']  # 데이터 준비

result = list(permutations(data, 3))
print(result)

combination

from itertools import combinations

data = ['A', 'B', 'C']  # 데이터 준비

result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result) 

중복 순열과 중복 조합

from itertools import product

data = ['A', 'B', 'C']

# 2개를 뽑는 모든 순열 구하기 (중복 허용)
result = list(product(data, repeat=2))
print(result)

from itertools import combinations_with_replacement

data = ['A', 'B', 'C']

# 2개를 뽑는 모든 조합 구하기 (중복 허용)
result = list(combinations_with_replacement(data, 2))
print(result)

최대 공약수와 최소 공배수

import math

# 최소 공배수(LCM)를 구하는 함수
def lcm(a, b):
    # 두 수를 곱하고 최대 공약수로 나눔
    # //는 소수점 이하 자릿수를 제거한 몫을 구하는 연산자(Floor Division)
    return a * b // math.gcd(a, b)

a=21
b=14

print(math.gcd(21, 14)) # 최대 공약수(GCD) 계산
print(lcm(21, 14))      # 최대 공배수(LCM) 계산
profile
항상 질문하는 개발자가 되고 싶습니다✋

0개의 댓글