Python 108

[코딩 인터뷰]개념과 알고리즘 - 객체 지향 설계 문제(카드 한 벌:Python)

카드 한 벌 카드 게임에 쓰이는 카드 한 벌을 나타내는 자료구조를 설계하라. 그리고 블랙잭 게임을 구현하려면 이 자료구조의 하위 클래스를 어떻게 만들어야 하는지 설명하라. 👀 카드 게임과 블랙잭 게임에 대해서 알지 못하여 아래 사이트의 java코드를 바탕으로 python 코드로 재구성해보았습니다. GameAutomator에 필요한 부분은 작성하지 않았습니다. https://github.com/czepeda/Java-Cracking-the-Coding-Interview/tree/master/Chapter%208/8.1%20Deck%20of%20Cards%20and%20BlackJack/src/pkg8/pkg1/deck/of/cards/and/blackjack GitHub - czepeda/Java-Crac..

[코딩 인터뷰]개념과 알고리즘 - 비트 조작 문제(Python)

[ 삽입 ] 2개의 32비트 수 N과 M이 주어지고, 비트 위치 i와 j가 주어졌을 때 M을 N에 삽입하는 알고리즘 ⭐ M은 N의 j번째 비트에서 시작하여 i번째 비트에서 끝납니다. 그리고 j번째 비트에서 i번째 비트까지는 충분한 공간이 있다고 가정합니다. 예시) 입력 : N=10000000000, M=10011, i=2, j=6 출력 : N=10001001100 def updateBits(n, m, i, j): allOnes = ~0 left = allOnes = 1 else '0' d -= 1 if d >= 1 else 0 return (bin(w).lstrip("0b") if w else '0') + res 👀 소수점 아래의 부분을 2진수로 만드는 법은 소수점 아래의 값에 2를 곱한 다음 그 값이 ..

[코딩 인터뷰]자료구조 - 트리와 그래프 문제(Python)

[ 대부분의 문제에 사용한 Node 클래스 ] class Node: def __init__(self, name): self.name = name self.left = None self.right = None [ 노드 사이의 경로 ] 방향 그래프가 주어졌을 때 두 노드 사이에 경로가 존재하는지 확인하는 알고리즘 이 문제에서 사용할 Node와 Graph▼ 더보기 state = ("Unvisited", "Visited", "Visiting") class Node: def __init__(self, name): self.name = name self.state = state[0] self.adjacent = [] def setAdjacent(self, node): self.adjacent.append(node)..

[python]Can you sum?

https://www.codewars.com/kata/638bc5d372d41880c7a99edc/train/python Codewars - Achieve mastery through coding practice and developer mentorship A coding practice website for all programming levels – Join a community of over 3 million developers and improve your coding skills in over 55 programming languages! www.codewars.com 이 문제는 알고리즘 문제라기보다 수학 문제입니다. n을 입력받을 때 아래의 식의 답을 구하는 것입니다. 답이 클 경우 10의 9..

[코딩 인터뷰]자료구조 - 스택과 큐 문제(Python)

[ 한 개로 세 개 ] 배열 한 개로 스택 세 개 구현 class threeInone: def __init__(self): self.items = [] self.stackCnt = {1: 0, 2: 0, 3: 0} self.stackNumError = 'I have only 3 stacks' def pop(self, stackNum: int): idx = -1 if stackNum not in self.stackCnt.keys(): return self.stackNumError else: if self.stackCnt[stackNum] != 0: self.stackCnt[stackNum] -= 1 for i in range(1, stackNum+1): idx += self.stackCnt[i] else:..

[코딩 인터뷰]자료구조 - 연결리스트 문제(Python)

[ 연결리스트] Python으로 노드와 연결리스트를 간단하게 구현했습니다. # 노드 class Node: def __init__(self, d): self.data = d self.next = None # 연결리스트 class LinkedList: def __init__(self, data): self.head = Node(data) def appendNode(self, data): now = self.head while now.next is not None: now = now.next now.next = Node(data) def appendNode2(self, node:Node): now = self.head while now.next is not None: now = now.next now.next..

[코딩 인터뷰]자료구조 - 배열과 문자열 문제(Python)

[ 중복이 없는가 ] 문자열이 주어졌을 때 이 문자열에 같은 문자가 중복되어 등장하는지 확인하는 알고리즘 예시) hi ⇒ True, hello ⇒ False(l이 2개) def isUniqueChars(string): char_set = set() for s in string: if s in char_set: return False else: char_set.add(s) return True 👀 set을 사용한 이유는 특정 원소를 검색하는 연산이 O(1)의 시간 복잡도를 가지기 때문입니다. dictionary도 검색 연산이 O(1)이지만 굳이 키 값을 넣을 필요는 없기 때문에 사용하지 set으로 사용했습니다. [ 순열 확인 ] 문자열 두 개가 주어졌을 때 이 둘이 서로 순열 관계에 있는지 확인하는 알고리..

[python] 정규표현식 예시 모음

정규표현식 : 정규표현식 또는 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다. 자세한 설명은 아래의 사이트를 참고하시길 바랍니다. https://wikidocs.net/4308 ⭐ 사용 예시 import re pattern = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' p = re.compile(pattern) emails = ['python@mail.example.com', 'python+hi@example.com', # 올바른 형식 '@example.com', 'python@example', 'python@example-com'] # 잘못된 형식 for email in emails: print(p.match(email)..

[python] 뫼비우스 함수

👀 뫼비우스 함수 : 정수가 제곱인수가 없는 정수인지 여부에 따라 분류하는 곱셈적 함수. 기호 : μ(n) 예) μ(1) = 1, μ(7) = -1, μ(30) = μ(2×3×5) = (-1)^3 = -1 ✔️ 뫼비우스 함수 ⭐ 약수 구하기와 소수 판별하기 응용 def mobius(n): d = divisors(n) for i in d: if i**2 in d: return 0 return (-1)**(sum([is_prime(i) for i in d])) def divisors(n): result = set() for i in range(2, int(n**0.5)+1): if n%i == 0: result.add(i) result.add(n//i) return sorted(result) + [n] de..

[python] 소인수분해

👀 소인수분해 : 자연수를 소인수의 곱으로 나타낸 것 예) 10을 소인수분해 : 10 = 2×5 ⭐ 소인수 : 자연수의 인수 중 소수 ⭐ 소수 : 약수가 1과 자기 자신 뿐인 자연수 ✔️ 소인수분해 함수 입력 n이 2이상일 때 {소수1: 갯수1, 소수2: 갯수2, ...}형태로 반환. def factorization(n): a, result = 2, {} while n>1: while not n%a: if not a in result.keys(): result[a] = 1 else: result[a] += 1 n //= a a += 1 return result

728x90