TIL. 201028_PYTHON(2)
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] 이렇게 쓸 것! 파이썬은 가능 !
Author And Source
이 문제에 관하여(TIL. 201028_PYTHON(2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@0_0/TIL.-201028PYTHON2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)