[python] 백준 11557 : Yangjojang of The Year 11557번: Yangjojang of The Year (acmicpc.net) 11557번: Yangjojang of The Year 입학 OT때 누구보다도 남다르게 놀았던 당신은 자연스럽게 1학년 과대를 역임하게 되었다. 타교와의 조인트 엠티를 기획하려는 당신은 근처에 있는 학교 중 어느 학교가 술을 가장 많이 먹는지 www.acmicpc.net 브론즈 1 구현, 정렬 접근 대학교 이름과 술 소비량을 입력받으면 짝을 지어서 리스트에 삽입하도록 한다. [(학교1, 100), (학교2, 200), (학교3, 300)] 각각의 두번째 값을 기준으로 내림차순 정렬하여 첫번째 값의 학교이름을 출력하도록 한다. 파이썬의 lambda 함..
[파이썬] 클래스, self, __init__, __str__ 목차 클래스 데이터의 처리, 정의 등을 하나로 정리해 둔 모형과 같음. 붕어빵 틀과 같다. 효과 모든 변수를 어떠한 범위에 소속시킴. 재사용 간편함. 코드 수정 최소화. 함수 실행중에 함수 자신을 다시 호출하는 일이 가능. 사용법 클래스에 정의된 데이터와 메서드를 사용하기 위해서는 인스턴스를 생성하여 클래스를 실체화해야 한다. 객체란 붕어빵 틀에 반죽을 넣어서 만들어진 붕어빵과 같다. (이때 메서드란, 클래스 내에 기재된 함수를 의미한다.) 각 객체는 하나의 클래스에 의해 독립적으로 존재할 수 있으므로, 하나의 클래스에 대한 여러 가지 인스턴스들이 각각 다른 데이터를 가지도록 할 수도 있다. class Status(): def __init__..
[파이썬] 유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기 유클리드 호제법 A>B일때, A%B를 R이라고 할때, A와 B의 최대공약수와 B와 R의 최대공약수가 같다는 원리이다. A에 B를 대입하고 B에 R을 대입하는 과정을 반복하다보면 R=0이 되는 상황이 생기는데, 이때 B자리에 위치한 숫자가 바로 A와 B의 최대 공약수가 된다. def GCD(x, y): while y: x, y = y, x%y return x print(GCD(10, 12)) 2 y가 0이 아닌 수일때(참일 때) x, y = y, x%y는 계속해서 반복된다. x % y == 0이 되는 순간에 x%y은 y에 대입되므로 반복문의 조건을 만족하지 못해 빠져나오게 된다. x에는 y의 값이 대입되었으므로 x값을 반환함으로써 최대공약수..
[파이썬/자료구조] 스택(stack) LIFO(Last In First Out) 방식. 후입 선출이라고도 하며, 가장 먼저 들어간 값이 맨 아래에 깔린다. 가장 나중에 넣은 데이터를 가장 먼저 빼낼 수 있다. 프링글스 통에서 과자를 추가하고 꺼내는 형태와 같다. 스택 구조의 연산 Push : 스택에 값 추가. Pop : 스택 가장 마지막 원소를 삭제하고 반환. Peek : 스택 가장 마지막 원소를 반환.(삭제 x) Empty : 스택이 비어있으면 1, 아니면 0을 반환한다. 덱 라이브러리를 사용하면 리스트로 구현한 것보다 훨씬 빠르다. from collections import deque dq=deque() # 덱 생성 dq.append() # 덱의 가장 오른쪽에 원소 삽입 dq.popleft() # 가..
[파이썬] 큐(queue) 큐는 선입선출, FIFO(First In First Out) list append : 마지막에서 삽입 pop : 마지막꺼 제거 pop(n) : n번째 인덱스 값 제거 insert(n, x) : n번째 인덱스에 x값 삽입 queue = [1, 2, 3] queue.append(4) print(queue) queue.pop() print(queue) queue.pop(0) print(queue) queue.insert(0, 3) print(queue) [1, 2, 3, 4] [1, 2, 3] [2, 3] [3, 2, 3] 그러나 list는 무작위 접근(random access)에 최적화된 자료 구조이며 시간 복잡도가 O(N)이므로 데이터가 많아질 수록 느려짐. deque doubl..
파이썬 자료구조/알고리즘 10 : 소수 찾기 알고리즘 다음은 for~else문을 이용해서 1~1000까지의 소수를 출력하는 코드입니다. counter = 0 for n in range(2, 1001): for i in range(2, n): counter += 1 if n % i == 0: break else: print(n) print(f"나눗셈 실행 횟수 : {counter}") 2 3 5 (...) 983 991 997 나눗셈 실행 횟수 : 78022 for~else문은 for문이 break 등으로 빠져나가지 않고 끝까지 반복문을 수행했을 때 else문을 실행하는 구조입니다. 또한 for문이 실행되지 않는 경우에도 else문이 실행됩니다. 소수는 1과 자기 자신을 제외한 어떤 정수로도 나눠지지 않는..