[이코테 2021] 알고리즘 경향 분석 및 파이썬 문법 - 2

[이코테 2021] 알고리즘 경향 분석 및 파이썬 문법 - 2

모든 예시 코드는 Repl을 이용해서 확인해본다.


사전 자료형

  • 사전 자료형은 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형
  • 변경 불가능한 자료형을 키로 사용할 수 있습니다.
  • hash table로 불린다.
  • 데이터의 조회 시간 복잡도가 O(1)으로 list보다 효율적이다.
  • 중괄호를 이용한다. {} (초기화 가능)
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

key_list = data.keys()
value_list = data.values()

print(key_list)
print(value_list)       # dict_list 형태로 출력

print(list(key_list))
print(list(value_list)) # 리스트 형식으로 출력

b = {
    '홍길동' : 97,
    '이순신' : 98
}                       # 중괄호로 만들어주는 것 가능

print(b)
print(b['이순신'])      # 특정 key 값 출력 가능

for key in key_list:
    print(data[key])    # key값을 출력

집합 자료형

  • 중복 허용 x / 순서 x
  • 집합은 리스트 혹은 문자열을 이용해서 초기화 가능합니다.
    • 이때 set() 함수를 이용합니다.
  • 중괄호({})안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입함으로써 초기화 할 수 있습니다.
  • 데이터의 조회, 수정에 있어서 O(1)의 시간 복잡도를 가집니다.
data = set([1, 1, 2, 3, 4, 4, 5]) # 중복 숫자들은 하나만 나오게 된다.
print(data)

data = {1, 1, 2, 3, 4, 4, 5} # 중괄호로 표현 가능
print(data)
  • 집합 자료형의 연산
    • 합집합( ) , 교집합(&) , 차집합(-)
data = set([1,2,3])
print(data)

data.add(4)         #새로운 원소 추가
data.update([5, 6]) #새로운 원소 여러개 추가
data.remove(3)      #특정 원소 삭제

사전 자료형 & 집합 자료형의 특징

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

기본 입출력

  • input() 한 줄의 문자열을 입력 받는 함수
  • map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
n = input()
data = list(map(int, input().split()))

print(n)
print(data)

빠르게 입력을 받으려면?

import sys

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

표준 출력 방법?

a = 1
b = 2
print(a, b)       # 공백 두고 출력
print(7, end=" ")
print(8, end=" ") # 자동 줄바꿈 방지

f-string?

answer = 8
print(f"정답은 {answer} 입니다.")

조건문 & 반복문

  • 파이썬에서는 코드의 블록(Block)을 들여쓰기(Indent)로 지정합니다.
score = 85
if score >= 70:
  print('hi')     #조건이 맞으면 실행된다.
  if score >= 90:
    print('bye')
else:
  print("힘내!")
print("bybey !!") # 무조건 실행된다.
  • 공백 문자 4개를 이용해서 들여쓰기를 하자!

  • if ~ elif ~ else

a = 5

if a >= 0:
    print("a>=0")
elif a >= -10:
    print("0> a >= -10")
else:
    print("-10 > a")

조건문 - 연산자

  • 비교 연산자, 논리 연산자(and, or, not) 사용 가능
  • in 연산자와 not in 연산자
    • 리스트, 튜플, 문자열, 딕셔너리 모두 사용 가능

조건문 - pass 키워드

  • C++의 coninue랑 비슷하다. 조건 안에서 무시한다.
a = -5

if a >= 0:
    print("a>=0")
elif a >= -10:
    pass

조건문 - 부등식

  • 대수학의 부등식을 그대로 사용할 수 있습니다.
a = -5

if -10 <= a < 20:
    print("hi")
elif 20<= a and a < 25:
    print("bye")
else:
    print("good")

반복문 - while문

  • 예제 1부터 9까지 홀수의 합 구하기
i = 0
s = 0
while i <= 9:
    if i % 2 == 1:
      s += i
    i+=1
print(result)
  • 무한 루프 조심하기, break 구문 사용 가능

반복문 - for문

  • 첫 번째 인덱스부터 차례대로 하나씩 방문
  • range(), 리스트, 튜플 사용가능
array = [1,2,3,4,5]
for x in array:
  print(x)
  • range(첫번째 값, 끝수는 포함하지 않음, 더하는 수)
    • [첫번째 값, 끝 값)
    • 끝 값이 첫번째 값보다 낮으면 돌지 않고 나온다. (오류가 안남)
result = 0
for i in range(1,10):
    result += i
print(result)
  • coninue, break 키워드 사용 가능

  • 예제) if문에서 in을 써서 안에 수가 존재하는지 확인 가능 - 유용함!

    scores = [90, 85, 77, 65, 97]
    cheating_student_list = {2,4}
    
    for i in range(5):
        if i+1 in cheating_student_list:
            continue
        if scores[i] >= 80:
            print(i+1, "번 학생은 합격입니다.")