점심먹고 컴백함. 오늘 카이스트 문지캠 점심 상타치. 잔치국수에 간장 불고기였는데 꽤 낟밷.
일단 이따 한시반이나 두시쯤에 커피때리러 가기로 하고 그 전에 일단 클래스 메소드 심화 한편 마무리 한 뒤에 카드 정렬하기랑 첼로 풀어보도록 하옵시다. 하지만 항상 계획은 내맘대로 되지 않는 법.
오후 1시에서부터 3시간씩 쪼개서 시간을 쓰는 것이 좋을 것 같다는 생각이 조금 들기도 한다
Any funckin ways
클라스 내의 변수에 대해서 알아보고 있었는데
클래스 변수는 모든 인스턴스가 공유할 수 있다
물론 동일한 이름으로 변수생성 가능하다 -> 상위(클라스 변수, 부모클라스 변수)로 가서 찾아보는데...
왠만하면 이렇게 하지 않도록 한다
self가 들어가 있으면 인스턴스 변수로 생각하면 된다
안들어가 있으면 클래스 변수로 생각하면 되는데
이 주제로 대충 이제 뭔지 알 것 같은 느낌이다
지금 해보니까 왠만하면 클래스 변수를 막 바꿀 수 있는 것으로 쓰는 것은 안좋은 생각인게
init을 설정햇을때 기껏 올려놓은 변수들이 class 정의 된것을 다시 실행시키게 되면 다시 변수 원상태로 초기되는 것을 볼 수 있다. 그로니까 왠만하면 계속 이용할 fix가 보통 되어있는 것을 쓰는 게 좋을 것 같은 생각이다.
만약에 다시 써야 한다면
예를 들어 Class : Car는 Car.refund * self.price
이런식으로 클라스 자체를 불러와주는 것이 이득이라고 볼 수 있을 것 같다.
오오 이제 @classmethod
이게 무슨 소리 하는 지 이제 알 것 같다.
그니까 class 자체를 self로 쓰기 위해서 만든 것이다.
예를 들어,
Class Car:
price_per_raise = 1.3
@classmethod
def raise_price(cls, per):
if per <=1:
print('Please enter more than 1')
else:
cls.price_per_raise = per
print('Succeed!')
굳이 필요한가 ? 아무것도 받지 않기 때문에 좀 공통적으로 쓰일텐데 ...
@staticmethod
def is_bmw(inst):
if inst._company == 'Bmw':
return True
else:
return False
# 인스턴스로 호출하게 된다
print(car1.is_bmw(car1))
print(Car.is_bmw(car2))
이거는 이제.. 그냥 느끼는거지만 일단 파이썬을 진짜 야무지게 쓸려면 클래스는 물론 그냥 배포까지 어느정도 할 줄을 알아야 된다고 생각을 한다. 그런 의미에서 지금 듣고 있는 중급부터 시작해서 고급까지 쭉 배워야한다고 생각한다 아무래도 이번주는 파이썬 중급을 다 들을 수 있을 것같고... 그 후에 이제 필수 문법 배우기-> 오픈소스 패키지 배포 과정을 다음주에 들은 뒤에
다다음주에 고수가 되는 파이썬으로 마무리 하도록하자
한 마디로 heap를 만드는 것인데
80 합: 80
/ \
30 50 합: 80
/ \ / \
10 20 10 40 합: 80
해보니까 최대를 계속해서 오른쪽으로 빼면 이득인 것이 보인다.
#3개 존재
70
/ \
30 40 합 : 70
/ \
10 20 합 : 30
#4개 존재
from heapq import heappop, heappush
import sys
n_num = int(sys.stdin.readline())
heap = []
for _ in range(n_num):
num = int(sys.stdin.readline())
heappush(heap, (-num, num))
total = 0
cnt = 1
while len(heap) > 2:
total += (heappop(heap)[1]* cnt)
cnt += 1
while heap:
total += (heappop(heap)[1]*cnt)
print(total)
이게 아니라고? ㅎㅎ TTibal
from heapq import heappop, heappush
import sys
n_num = int(input())
heap = []
for _ in range(n_num):
num = int(input())
heappush(heap, num)
total = 0
while len(heap) > 1:
min1 = heappop(heap)
min2 = heappop(heap)
total += (min1+ min2)
heappush(heap, min1+min2)
print(total)
오케이 그러면 이제 백준 13334 철로 까지만 마무리하고 자소서 2번 좀 건든 다음에
다시 부족한거 메꾸면서 올라가는 것을 목표로 합시다.
우선 먼저 생각한 것은 distance가 안되는 것들을 제외해주는 전처리가 필요하다는 점이다.
사실 그 후에 생각한것은 min들의 max heap을 만들고 max들의 min heap을 만들어서
그것을 포함할 수 있는 점을 확인 한다는 것인데 ... 그게 약간 쉽지는 않을 것이라는 생각.답을 봤는데도 모르겟는... 이따 저녁에 도움을 좀 받고 다시 와야될것같은 느낌
이건 도히누님이 좀 잘 알려줬다랄까... 그 무조건 길이가 되는 것을 넣고 그것에 대한 최대값을 구하는 느낌이라 좀 헷갈렸던것 같다... --> 내일 와서 다시 한번 봐야 될것 같은 느낌?!
일단 함수를 2개 생성
1. 바둑판 다 일치하는 지 확인하는 함수
check_number(이차원 배열)
return 값: 다 동일하면 True, 하나라도 틀리면 False
2. 이차원 배열을 4개로 쪼개는 함수
cut_quarter(이차원 배열)
return 값: list(4개의 이차원 배열)... 3차원 배열인가 ? ㅎㅎ
# 데이터 처리
n = int(input())
n_line = []
for _ in range(n):
n_line.append(list(map(int, input().split())))
def check_number(list):
setting = set()
for one_line in list:
for item in one_line:
setting.add(item)
if len(setting) == 1:
return True
else:
return False
def cut_quarter(list):
quarter1 = []
quarter2 = []
quarter3 = []
quarter4 = []
l = len(list)
for i in range(0, l//2):
quarter1.append(list[i][:l//2])
quarter2.append(list[i][l//2:])
for j in range(l//2, l):
quarter3.append(list[j][:l//2])
quarter4.append(list[j][l//2:])
return [quarter1, quarter2, quarter3, quarter4]
white, blue = 0, 0
def solution(list):
# checking
global white, blue
if check_number(list) == True:
if list[0][0] == 1:
blue+=1
else:
white += 1
return
else:
for quarter in cut_quarter(list):
solution(quarter)
solution(n_line)
print(white)
print(blue)