TIL. 201028_PYTHON(2)

YS C·2020년 10월 28일
0

PYTHON

목록 보기
2/4

1-50 리뷰

개인적으로 공부하면서 조금 어려웠다! 기억하고 싶다! 생각되는 부분을 남깁니다.

8: 딕셔너리 키 이름 중복

d = {'height': 100, 'weight':78, 'weight': 84, 'temparture': 36, 'eyesight':1 }
print(d['weight'])
  • 키 값 중복 될 경우 마지막 값 출력(오른쪽 값이 덮어 씌여졌다고 생각)

10: 별 찍기

n = int(input())
for i in range(1, n+1):
    	print(" "*(n-i), "*" * (2*i-1))


* 뿐만 아니라 공백을 어떻게 처리해야할지 살짝 고민이 필요했던 문제

12: 게임 캐릭터 클래스 만들기

class Wizard:
    def __init__(self, health, mana, armor):
        self.health = health
        self.mana = mana
        self.armor = armor
    def attack(self):
        print("파이어볼")
x = Wizard(health = 545, mana = 210, armor = 10)
print(x.health, x.mana, x.armor)
x.attack()
  • 간단한 클래스 작성이었지만 클래스 공부가 더 필요하다고 느꼈던 부분!

27: 딕셔너리 만들기

keys = input().split()
values = map(int, input().split()
result = dict(zip(keys, values))
print(result)
  • zip함수
    zip(iterable)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.
    ※ 여기서 사용한
    iterable은 반복 가능(iterable)한 자료형 여러 개를 입력할 수 있다는 의미이다.
    참고: https://wikidocs.net/32#zip -점프 투 파이썬

30: 문자열 속 문자 찾기

a = input()
b = input()
result = a.index(b)
print(result)
  • index와 find의 차이는 find는 존재하지 않는 문자나 문자열을 찾을 경우 -1 반환, index는 존재하지 않는 문자나 문자열을 찾을 경우 오류 발생 !

33: 거꾸로 출력하기

n = input().split()
n.reverse()
print(' '.join(n))
  • reverse 와 reversed 차이
  • reverse는 list타입에서 제공하는 함수
  • reverse는 값을 반환하지 않는다. 단순히 해당 list를 뒤섞어준다
  • reversed는 내장함수로 list에서 제공하는 함수가 아니다.
  • reversed는 객체를 반환한다.
  • 사용하고 싶다면 list(반환객체) or join문을 통해 문자열로 만들도록 하자 !

34: sort 구현하기

data = list(map(int, input().split()))
data_d = data.copy()
data.sort()
if data_d == data:
    print("YES")
else:
    print("NO")
  • data_d = data 이런식으로 복제하면 안됨
  • 왜...? -> 같은 객체를 참고해서 data 값을 바꾸면 data_d 값도 같이 바뀜
  • sort() 와 sorted() 의 차이
  • a는 어떤 리스트 라고 가정
  • print(a.sort()) -> None 출력
  • a.sort() -> print(a) -> 정상적으로 sort값 출력
  • sorted(a) -> 정상적으로 sort값 출력

41: 소수판별

  • 소수: 1과 자기자신만 나머지가 0
  • 소수(素數, 발음: [소쑤], 문화어: 씨수, 영어: prime number)는 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다. - 위키백과
import math
def prime_number(n):
    i = 3
    if n == 2:
        return print("YES")
    if n == 1:
        return print("NO")
    if n % 2 == 0:
        return print("NO")
    n_sqrt = math.sqrt(n)
    while i <= n_sqrt:
        if n % i == 0:
            return print("NO")
        else:
            i = i + 2
        return print("YES")
    return print("YES")
prime_number(int(input()))
  • 나누어보는 숫자 범위를 줄인다...왜? -> 시간 복잡도를 n에서 sqrt(n)으로 만들기 위해서 !
  • N = A * B
  • 어떤 수 n이 소수가 아닌 경우 n = a * b 관계이다. a < b 라고 가정
  • 루트n 을 기준으로 루트n 보다 작은 a가 적어도 하나 존재한다.
  • 결론적으로 루트 n 보다 작은 수(a) 가 n에 나눠 0이 나오면 소수가 아니다. 1, 2제외

41(번외편): 에라토스네테스의 체

  • 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
  • 2는 소수이므로 오른쪽에 2를 쓴다.
  • 자기 자신을 제외한 2의 배수를 모두 지운다.
  • 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다.
  • 자기 자신을 제외한 3의 배수를 모두 지운다.
  • 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다.
  • 자기 자신을 제외한 5의 배수를 모두 지운다.
  • 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다.
  • 자기 자신을 제외한 7의 배수를 모두 지운다.
  • 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.
def prime_list(n):
    # 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주)
    sieve = [True] * n
    # n의 최대 약수가 sqrt(n) 이하이므로 i=sqrt(n)까지 검사
    m = int(n ** 0.5)
    for i in range(2, m + 1):
        if sieve[i] == True:           # i가 소수인 경우
            for j in range(i+i, n, i): # i이후 i의 배수들을 False 판정
                sieve[j] = False
    # 소수 목록 산출
    return print([i for i in range(2, n) if sieve[i] == True])
prime_list(int(input()))
  • 참고자료: 위키백과(에라토스테네스의 체)

42: 2020년

  • datetime 모듈 사용
import datetime
a = int(input())
b = int(input())
data = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
d = datetime.date(2020, a, b)
print(data[d.weekday()])
  • time 모듈 없이 구현
https://zetawiki.com/wiki/Zeller%EC%9D%98_%EA%B3%B5%EC%8B%9D (Zeller의 공식 참고...ㅜ)

50: 버블정렬 구현하기

def bubble(n, data):
    for i in range(n-1):
        for j in range(len(data)-1):
            if data[j] > data[j+1]:
                temp = data[j+1]
                data[j+1] = data[j]
                data[j] = temp
    for i in range(n):
        print(data[i], end=" ")
n = int(input())
data = list(map(int, input().split()))
bubble(n, data)
  • 최소 하나는 자기 자리를 찾아간다...
  • for문 한번 돌리면 맨 마지막에 올 숫자가 정해진다...!
  • temp 쓰지말고 data[j], data[j+1] = data[j+1], data[j] 이렇게 쓸 것! 파이썬은 가능 !

0개의 댓글