I about me

[이것이 코딩테스트다] 1. 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기 (2) 본문

Algorithm/이것이 코딩테스트다!

[이것이 코딩테스트다] 1. 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기 (2)

ssungni 2024. 7. 16. 22:41

해당 강의를 참고하여 공부를 진행했습니다.

https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC

 

지극히 개인적으로 헷갈렸던 부분이나 몰랐던 내용에 대해서만 정리했습니다.


6강: 파이썬 문법 - 사전, 집합 자료형

  • 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다.
  • 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 있다.
    • 사전의 키(Key) 혹은 집합의 원소(Element)를 이용해 O(1)의 시간 복잡도로 조회한다.

7강: 파이썬 문법 - 기본 입출력

import sys

data = sys.stdin.readline().rstrip()
print(data)

8강: 파이썬 문법 - 조건문

# if, elif, else

# pass

a = 50

if a >= 30:
    pass
else:
    print("a < 30")

 

# 조건문 간소화: 조건문이 가운데 들어간다고 생각하기

score = 85
result = "Success" if score >= 80 else "Fail"

print(result)

 

9강: 파이썬 문법 - 반문

# while

# for → for문으로 하는 것이 더 간결한 경우가 많다

# continue, break

 

10강: 파이썬 문법 - 함수와 람다 표현식

#  global

a = 0

def fuc():
    global a # 선언된 전역 변수를 불러와
    a += 1

for i in range(10):
    fuc()

print(a) # 10

 

리스트에서 따로 global 선언을 따로 안 해줘도 되긴 하다.

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

def func():
    array.append(6)
    print(array)

func() # [1, 2, 3, 4, 5, 6]

 

그러나 함수 안에 리스트를 넣을 경우, 함수 안에 선언된 것이 우선되어 결과값이 도출된다.

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

def func():
    array = [3, 4, 5]
    array.append(6)
    print(array)

func() # [3, 4, 5, 6]

 

그러므로 명확하게 해주고 싶을 때는 global array 해주도록 하자.

 

# lambda

여러 개의 리스트에 적용하는 것은 처음 알았다...

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

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

 

11강: 파이썬 문법 - 자주 사용되는 표준 라이브러리

import heapq
import bisect

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)

 

아래의 문제를 풀어보면 참 좋을 것 같다

더보기

큰 수식 찾기

N = input().split()
result1 = eval(N[0])
result2 = eval(N[1])
print(max(result1, result2))

sorted()

result = sorted([9, 1, 8, 5, 4])
print(result) # [1, 4, 5, 8, 9]

 

sorted() with 'reverse = True'

reverse_result = sorted([9, 1, 8, 5, 4], reverse = True)
print(reverse_result) # [9, 8, 5, 4, 1]

 

sorted() with key

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

 

from itertools

  • 순열 nPr = n * (n - 1) * (n - 2) * ... * (n - r + 1)
from itertools import permutations

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

result = list(permutations(data, 3))
print(result)
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

 

  • 조합 nCr = n * (n - 1) * (n - 2) * ... * (n - r + 1) / r!
from itertools import combinations

result = list(combinations(data, 2))
print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]

 

  • 중복 순열
from itertools import product

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

result = list(product(data, repeat = 3))
print(result)

 

  • 중복 조합
from itertools import combinations_with_replacement

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

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

 

 

from collections

from collections import Counter

L = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(L['blue']) # 3
print(L['green']) # 2
print(dict(L)) # {'red': 2, 'blue': 3, 'green': 1}

 

최대공약수와 최소공배수

import math

def lcm(a, b):
    return a * b // math.gcd(a, b)

a = 21
b = 14

print(math.gcd(21, 14)) # 최대공약수 gcd 7
print(lcm(21, 14)) # 최소공배수 lcm 42