코딩일지/TIL: Today I Learned

20220901 TIL

야언 2022. 9. 1. 17:12

오늘의 한 일

  • 파이썬 문법 기초 강의 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/

 

파이썬의 enumerate() 내장 함수로 for 루프 돌리기

Engineering Blog by Dale Seo

www.daleseo.com

 

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)

 

 

느낀점: 

 

 이런 종류의 문제를 완전히 처음 풀어보다보니 사소한 곳에서도 실수가 나오고, 단순 프린터 외에 주어지는 정보를 어떻게 이용하여 작동시키는지 감이 잡히지 않아 많은 시행착오를 겪었다.

 

A B를 도대체 어디서 받아오는거야?

 

A B를 도대체 어디서 받아오는거야? 2

 

그래도 구글링을 통해 정보를 얻고 직접 수행해가면서 코딩에 점점 더 익숙해지는 느낌을 받을 수 있었고, 앞으로 더 발전해 나갈 수 있는 동기부여가 된 것 같다!

 

여기였군요..