Python 13

스폐셜 메서드(Dunder Method)

1. 파이썬 스폐셜 메서드란?__init__, __call__, __lt__처럼 앞뒤로 언더바 2개(__)가 붙은 메서드객체의 행동을 정의할 때 사용예:len(obj) → obj.__len__() 호출obj1 obj() → obj.__call__() 호출2. 코딩테스트에서 자주 쓰이는 스폐셜 메서드메서드역할코테 활용 예시__init__객체 생성 시 초기화상태값 세팅__lt__정렬 기준 커스터마이징__eq__, __hash__객체 비교, 집합/딕셔너리 키로 사용BFS/DFS에서 방문 좌표 관리__len__, __getitem__길이/인덱스 접근 지원슬라이딩 윈도우, 커스텀 컨테이너__add__, __sub__연산자 오버로딩벡터/좌표 연산 문제__call__객체를 함수처럼 호출카운터, 메모이제이션, 시뮬레이..

Misc/Python 문법 2025.08.29

[BOJ] 7806: GCD!

1. PROBLEMhttps://www.acmicpc.net/problem/7806문제두 수의 최대공약수는 두 수를 나머지 없이 나눌 수 있는 가장 큰 자연수로 정의한다. 예를 들어, 8과 12의 최대공약수는 GCD(8,12)로 나타내고, 그 값은 4이다. 4는 8과 12를 나눌 수 있는 가장 큰 정수이기 때문이다. (8과 12의 공약수는 1, 2, 4가 있다)자연수의 팩토리얼은 그 수보다 작거나 같은 모든 양의 정수의 곱이다. 예를 들어, 5의 팩토리얼은 5!로 나타내고 1*2*3*4*5 = 120이다. (0!은 1로 정한다)두 수 n과 k가 주어졌을 때, n!과 k의 최대공약수를 구하는 프로그램을 작성하시오. 예를 들어, n = 3, k = 10이라면, GCD(n!,k) = GCD(3!,10) = G..

[BOJ] 9613. GCD 합: combination 활용

1. PROBLEM문제양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 출력각 테스트 케이스마다 가능한 모든 쌍의 GCD의 합을 출력한다.2. SOLUTION#1.import sys from math import gcdinput = sys.stdin.readlineT = int(input())for _ in range(T): arr = list(map(int, input().split())) N = arr[0] # 배열 크기 nums = arr[1:] # 실제 숫자 리스트 total..

[python] math 모듈

1. math.gcd(a, b)최대공약수(GCD)를 구함예: math.gcd(12, 15) -> 3최소공배수(a*b) / gcd(a, b)2. math.factorial(n)n! (팩토리얼) 계산예: math.factorial(5) -> 1203. math.sqrt(x)제곱근 반환예: math.sqrt(16) -> 4.04. math.isqrt(n) (파이썬 3.8 이상)정수 제곱근 (소수점 버림)예: math.isqrt(10) -> 35. math.ceil(x)올림 함수 (소수점 위로 올림)예: math.ceil(4.2) -> 56. math.floor(x)내림 함수 (소수점 아래로 내림)예: math.floor(4.8) -> 47. math.pow(x, y)거듭제곱 (x^y) 반환, float 반환예..

Misc/Python 문법 2025.08.09

[Programmers] 12940. 최대공약수와 최소공배수: math 모듈 활용

1. PROBLEM문제 설명두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.제한 사항두 수는 1이상 1000000이하의 자연수입니다.입출력 예nmreturn312[3, 12]25[1, 10]자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.https://school.programmers.co.kr/learn/courses/30/lessons/12940 프로그래머스SW개발자를 위한 평가, 교육의 Total So..

[Python] 10989. 수 정렬하기3 (다시 풀어보기)

1. 문제https://www.acmicpc.net/problem/109892. 해결try1) sort() 사용 - 메모리 초과n = int(input())numList = [int(input()) for _ in range(n)]numList.sort()print(numList)이 문제의 메모리 제한이 8MB로 작다. 여기에 입력 개수가 10,000개나 되니 이를 모두 리스트에 저장하면 메모리 초과가 발생한다.(메모리 제한이 작은 걸 몰랐어도 출력 결과가 리스트가 아님을 보고 다시 생각해봤어야 한다.) try2) 계수 정렬 사용 - 시간 초과n = int(input())arr = [0] * 10001for _ in range(n): num = int(input()) arr[num] += 1f..

[python] 15829. Hashing

1. 문제https://www.acmicpc.net/problem/15829 2. 해결try1) 런타임 에러 # 입력len = int(input())userList = input()M = 1234567891R = 31# ord('a') = 97 이용하여 알파벳에 고유한 계수 부여 (1~26)arrList = []for a in userList: arrList.append(ord(a) - 96)# 해시 값 계산hashResult = 0for l in range(len): hashResult += int(arrList[l]) * (R ** l)print(hashResult % M)굳이 모든 알파벳에 고유한 계수를 부여할 필요가 없었다.입력된 알파벳에 대해서만 계산했어도 충분하니까!try2)# 입력..

[python] 2798. 블랙잭

1. 문제https://www.acmicpc.net/problem/2798 2. 해결try 1)from itertools import combinations# 입력n, m = map(int, input().split())nList = list(map(int, input().split()))mList = []for card in combinations(nList, 3): if sum(card) m과 같을 때도 mList에 append해줘야 되는데.... 안해줘서 틀림이런 경우 좀 없게 정신차리자try 2)from itertools import combinations# 입력n, m = map(int, input().split())nList = list(map(int, input().split()))mL..

728x90