본문 바로가기

파이썬(Python)16

로또 추첨기 그냥 심심해서 한 번 만들어 보았는데, 시험삼아 천만번을 시행해 보았지만 1등이 나오지 않았다. ㅇ.....로또에는 손을 대지 않는 것이 좋겠다. # 로또 실행 횟수를 입력하면, 해당 실행 횟수만큼의 결과를 출력합니다 # 실행 중 10000회마다 실행 횟수를 표시하며, 2등 이상 당첨되었을 경우 결과를 표시합니다. import random class Lottery: # 맞춘 개수, 맞춘 번호들, 보너스번호 당첨숫자(당첨 아닐시 0), 등수 def __init__(self): self.potted_nums = [] # 자동으로 작성된 번호들 self.answer_nums = [] # 정답 번호들. 마지막 숫자가 보너스 번호 self.num_of_correct = 0 # 보너스번호는 제외 self.corre.. 2021. 2. 20.
빗물 트래핑 Q. 높이를 입력받아, 비가 온 후 얼마나 많은 물이 쌓일 수 있는지 계산하라. ex) [3, 0, 1] -> 1 , [1, 4, 1, 5] -> 3 1. 투 포인터 활용 두 개의 포인터를 리스트의 맨 왼쪽, 오른쪽에서 각각 중앙을 향해 출발시킨다. 양쪽의 왼쪽에서 가장 높은 값, 오른쪽에서 가장 높은 값 중에서 더 작은 쪽을 큰 쪽을 향해 이동시킨다 (left_max가 3이고 right_max가 5인 경우 left가 우측으로 1칸 이동) 이때 왼쪽을 예로 들자면, 왼쪽부터 우측으로 이동하며 높이가 낮아지는 경우 낮아진 만큼을 결과값에 합산하고, 높이가 높아지는 경우에는 해당 인덱스를 left_max로 갱신한다. (오른쪽도 방향만 반대일 뿐 동일하다) 위의 과정을 반복하면, 결국 left와 right가 .. 2021. 2. 11.
함수 인자 전달 C언어나 C++을 공부하다 보면, 함수에 인자를 전달하는 방식으로 Call by value, 또는 Call by pointer이나 reference 등의 방식을 본 적이 있을 것이다. 파이썬에서는 이들과도 조금 다른 방식으로 인자를 전달하는데, 일반적으로 Call by object reference 라고 한다 (Call by Sharing이라고도 한다). 즉 객체의 형태로 인자를 전달하되, 레퍼런스, 즉 참조의 방식으로 전달한다. 또 변수가 수정 가능한지 아닌지에 따라 결과에 차이가 있다. ... 무슨 이야기인지 나도 처음에는 이해가 잘 가지 않았는데, 아래의 예시들을 통해 이해해 보자. int와 list, 두 가지의 자료형을 통해 설명해 보고자 한다. 목차 1. int (immutable 대표주자) 2.. 2021. 2. 7.
객체 in Python 파이썬의 모든 자료형은 객체이다. C언어를 예로 들어보자. C언어에서 int num = 10; 과 같이 정수 변수를 하나 생성한다면, 4byte (아주 옛날 프로세서가 아니라면) 만큼의 메모리에 10을 저장하는 방식으로 동작한다. 따라서 C언어에서 정수의 크기는 4byte이다. 또한 정수들로 이루어진 배열을 생성하게 되면, '4 x 배열의 길이' 만큼의 메모리를 차지한다. 그렇다면 파이썬에서 정수의 크기는 4byte일까? 직접 확인해 보자. >>> num = 10 >>> num.__sizeof__() 28 무려 28바이트이다. 이는 파이썬의 특성 때문인데, 파이썬은 모든 자료형이 객체이다. 아래는 위의 num 변수가 가지고 있는 '내장 변수' 들을 출력하는 코드이다. >>> import pprint # .. 2021. 2. 7.
함수에서의 리스트 수정..? 어제 몇 시간을 아래 코드 가지고 씨름하고 있었다...;; 결국 함수에서의 인자 전달 과정에 대해 여러 번 다시 찾아보았고, 배운 것이 많았다 ㅠㅠ def foo(input : list) -> None: input = [0] bar = [1,2,3] foo(bar) print(bar) # [1,2,3] (왜 [0]이 아니지? 라고 생각하셨다면, 처음의 저와 같은 생각을 하신 겁니다..ㅎ) 결론부터 이야기하자면, 위의 함수는 리스트를 수정하는 것이 아니라 재할당하는 것이다. 즉, 리스트를 수정하는 경우와 재할당하는 것은 다르다. 그러니까, 아래의 코드는 우리가 생각하는 대로 동작한다. def foo(input : list) -> None: input[-1] = 0 bar = [1,2,3] foo(bar) .. 2021. 2. 7.