오늘의 한 일
- 파이썬 문법 기초 강의 1 - 1~10강
- 백준 알고리즘 문제 풀이
자료형 (int, float, str, list)
숫자형 자료형 - int : 정수형
float : 실수형
* Bool 자료형
x = True # 참
y = False # 거짓
# 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 납니다~ z = true # name 'true' is not defined
True = 1 # True/False는 변수명으로 쓸 수 없어요!
보통 '비교연산자'의 결과로 나타내기 위해 쓰인다.
문자열 str
- String은 글자의 Unicode 코드로 이루어진 불변한 순서있는 집합.
- " " (쌍따옴표), ' '(작은따옴표) 모두 사용가능하지만 " '와 같이 혼용할 수는 없다.
- 큰따옴표 안에 작은따옴표는 들어갈 수 있고, 반대로 큰따옴표 안에 작은따옴표 들어갈 수 있다.
a = 1
b = "a"
c = a # 따옴표로 감싸지 않으면 변수이름을 뜻함
print(a, b, c) # 1 "a" 1
문자열 연산
- 문자열 간의 더하기는 두 문자열을 이어붙인 문자열을 반환
first_name = "Harry"
last_name = "Potter"
first_name + last_name # HarryPotter
first_name + " " + last_name # Harry Potter
a = "3"
b = "5"
a + b # 35
- 문자열과 정수를 더하면 에러
a = "3"
a + 5 # 문자열과 숫자형은 더할 수 없어서 에러!
- len() 함수 - 길이 구하기
print(len("abcde")) # 5
print(len("Hello, Sparta!")) # 14
print(len("안녕하세요.")) # 6
- 인덱싱과 슬라이싱
f="abcdefghijklmnopqrstuvwxyz"
f[1] # b 파이썬은 숫자를 0부터 셉니다
f[4:15] # efghijklmno f[4]부터 f[15] 전까지, 총 15-4=11개!
f[8:] # ijklmnopqrstuvwxyz f[8]부터 끝까지, 앞의 8개 빼고!
f[:7] # abcdefg 시작부터 f[7] 전까지, 앞의 7개!
f[:] # abcdefghijklmnopqrstuvwxyz 처음부터 끝까지
myemail = 'abc@sparta.co'
domain = myemail.split('@')[1].split('.')[0] # @을 기점으로 슬라이싱 후 [뒷열]의 .을 기점으로 슬라이싱 후 [앞열]
print(domain)
리스트형 list
- 순서가 있는, 다른 자료형들의 모임
a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()
e = [1, 2, 4, [2, 3, 4]]
- 리스트의 길이도 len() 함수를 사용해서 잴 수 있다.
a = [1, 5, 2]
print(len(a)) # 3
b = [1, 3, [2, 0], 1]
print(len(b)) # 4
- 순서가 있기 때문에, 문자열에서처럼 인덱싱과 슬라이싱을 사용할 수 있다.
a = [1, 3, 2, 4]
print(a[3]) # 4
print(a[1:3]) # [3, 2]
print(a[-1]) # 4 (맨 마지막 것)
- 리스트의 요소가 리스트라면? 중첩
a = [1, 2, [2, 3], 0]
print(a[2]) # [2, 3]
print(a[2][0]) # 2
딕셔너리 dictionary
- 키(key)와 밸류(value)의 쌍으로 이루어진 자료의 모임
person = {"name":"Bob", "age": 21}
print(person["name"])
- 순서가 없기 때문에 인덱싱을 사용할 수 없다.
person = {"name":"Bob", "age": 21}
print(person[0]) # 0이라는 key가 없으므로 KeyError 발생!
- 딕셔너리의 값을 업데이트하거나 새로운 쌍의 자료를 넣을 수 있다.
person = {"name":"Bob", "age": 21}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}
person["height"] = 174.8
print(person) # {'name': 'Robert', 'age': 21, 'height': 174.8}
- 딕셔너리의 밸류로는 아무 자료형이나 쓸 수 있다. 다른 딕셔너리도 가능!
person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"]) # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"]) # 92
- 딕셔너리는 리스트와 함께 쓰여 자료를 정리하는 데 쓰일 수 있다!
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]
# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'
person = {'name': 'john', 'age': 7}
people.append(person)
# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'
조건문(if, elif, else)
if 문 : 조건을 만족했을 때만 특정 코드를 실행하도록 하는 문법
elif와 else : 조건을 만족하지 않을 때 다른 코드를 실행하고 싶을 때 쓰는 문법
예제)
age = 27
if age < 20:
print("청소년입니다.")
elif age < 65:
print("성인입니다.")
else:
print("무료로 이용하세요!")
반복문(for)
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.
* for문 - enumerate, break
enumerate - 내장 함수로 번호 붙이기
*번호를 1부터 시작하고 싶다면? enumerate() 함수를 호출할 때 start 인자에 시작하고 싶은 숫자
https://www.daleseo.com/python-enumerate/
break - 반복문 끝내기
함수
연습) 주민등록번호를 입력받아 성별을 출력하는 함수 만들기
def check_gender(pin):
num = int(pin.split('-')[1][0]) # 뒷번호 첫자리만 잘라내기
if num % 2 != 0:
print('남성')
else:
print('여성')
check_gender("200101-3012345")
check_gender("200101-2012345")
check_gender("200101-1012345")
백준 알고리즘 문제풀이
오늘의 진행도
사칙연산
print 출력시 ", `, \ 문자에 주의하며 출력하는 문제
조건문
어려웠던 문제들은 백준 알고리즘 카테고리를 만들어 풀이 정리해두기.
****백준 문제풀이 중 가장 중요하다고 생각하는 코드
a, b = map(int, input('숫자 두 개를 입력하세요: ').split())
print(a + b)
실행 결과
숫자 두 개를 입력하세요: 10 20 (입력)
30
※ 백준에서 자주 쓰이는인풋값 받기!
# 하나의 스트링값 입력 받기
a = input()
print(type(a))
print(a)
# 하나의 인트값 입력 받기
a = int(input())
print(type(a))
print(a)
# 두개 (혹은 복수의) 스트링값 입력 받기
a, b = input().split()
print(a)
print(b)
# 두개 (혹은 복수의) 인트값 입력 받기
a, b = map(int, input().split())
print(type(a))
print(a)
print(type(b))
print(b)
# 복수의 인트값들을 하나의 리스트로 입력 받기
a = list(map(int, input().split()))
print(type(a))
print(a)
느낀점:
이런 종류의 문제를 완전히 처음 풀어보다보니 사소한 곳에서도 실수가 나오고, 단순 프린터 외에 주어지는 정보를 어떻게 이용하여 작동시키는지 감이 잡히지 않아 많은 시행착오를 겪었다.
그래도 구글링을 통해 정보를 얻고 직접 수행해가면서 코딩에 점점 더 익숙해지는 느낌을 받을 수 있었고, 앞으로 더 발전해 나갈 수 있는 동기부여가 된 것 같다!