문제 8

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

콜 센터 고객 응대 담당자, 관리자, 감독관 이렇게 세 부류의 직원들로 구성된 콜 센터가 있을 때, 콜 센터로 오는 전화는 먼저 상담이 가능한 고객 응대 담당자로 연결되어야 합니다. 고객 응대 담당자가 처리할 수 없는 전화는 관리자로 연결되고, 관리자가 처리할 수 없는 전화는 다시 감독관에게 연결됩니다. 이 문제를 풀기 위한 자료구조를 설계하라. [ Rank ] from enum import Enum class Rank(Enum): DIRECTOR = 0 MANAGER = 1 RESPONDENT = 2 def __next__(self): if self.value != 0: return Rank(self.value - 1) else: return ValueError("You are Director.") 👀..

[코딩 인터뷰]개념과 알고리즘 - 객체 지향 설계 문제(카드 한 벌: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)

[ 한 개로 세 개 ] 배열 한 개로 스택 세 개 구현 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으로 사용했습니다. [ 순열 확인 ] 문자열 두 개가 주어졌을 때 이 둘이 서로 순열 관계에 있는지 확인하는 알고리..

728x90