코딩인터뷰 13

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

[코딩 인터뷰]개념과 알고리즘 - 객체 지향 설계

[ 객체 지향 프로그래밍 ] 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 프로그램을 제작합니다. 여기서 객체란 하나의 역할을 수행하는 '메서드와 변수(데이터)'의 묶음입니다. [ 객체 지향 프로그래밍 요소 ] 👀 캡슐화 → 정보 은닉 : 변수와 함수를 하나의 단위로 묶는 것을 의미합니다. 👀 상속 → 재사용+확장 : 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 의미합니다. 👀 다형성 → 사용편의 : 하나의 변수, 또는 함수가 상황에 따라 다른 의미로 해석될 수 있는 것을 의미합니다. 오버라이딩(Overriding) : 부모 클래스에 정의되어 있는 메서드를 자식클래스에서 재정의하여 사용하는 것입니다. 오버로딩(Overloading) : 같은 이름을..

[코딩 인터뷰]개념과 알고리즘 - 수학 및 논리 퍼즐

[ 소수 ] 소수는 약수가 1과 자기 자신뿐인 자연수입니다. 모든 자연수는 소수의 곱으로 나타낼 수 있다는 규칙이 있습니다. 👀 가분성(divisibility) 어떤 수 x로 y를 나눌 수 있으려면 x를 소수의 곱으로 분할하였을 때 나열되는 모든 소수는 y를 소수의 곱으로 분할하였을 때 나열되는 모든 소수들의 부분집합이어야 합니다. 즉, x/y를 만족하려면 모든 i에 대해서 j_i 2){ return false; } int sqrt = (int) Math.sqrt(n); for(int i=2; i

[코딩 인터뷰]개념과 알고리즘 - 비트 조작 문제(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를 곱한 다음 그 값이 ..

[코딩 인터뷰]개념과 알고리즘 - 비트 조작

[ 손으로 비트 조작해보기 ] 비트 조작에 익숙하지 않다면 손으로 다음의 연습문제들을 풀어보는 것이 좋습니다. 비트는 1과 0만을 가지는 2진수로 +, -와 *의 경우 똑같이 연산하시면 됩니다. 연산자 기능 + 더하기 연산 - 뺴기 연산 * 곱셈 연산 & 비교하는 두 비트가 1이면 1, 그 외의 모든 경우는 0인 연산 (AND) | 비교하는 두 비트가 0이면 0, 그 외의 모든 경우는 1인 연산 (OR) ^ 비교하는 비트 같으면 0 다르면 1인 연산 (XOR) ~ 모든 비트 반전하는 연산(NOT) >> 비트 열을 오른쪽으로 이동 연산 2 1101 ^ (~1101) 1000 - 0010 1011 ^ 0101 1101 & (~0 >연산과 같습니다. ⭐ Java Code int repeatedArithmeti..

[코딩 인터뷰]자료구조 - 트리와 그래프 문제(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)..

[코딩 인터뷰]자료구조 - 트리와 그래프

[ 트리의 종류 ] 👀 트리 : 노드로 이루어진 자료구조입니다. 트리를 재귀적으로 설명하면 다음과 같습니다. 하나의 루트 노드를 갖습니다. → 사실 그래프 이론에서는 하나의 루트 노드를 가질 필요는 없습니다. 루트 노드는 0개 이상의 자식 노드를 갖고 있습니다. 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고 이는 반복적으로 정의됩니다. ⭐ Node class Node{ public String name; public Node[] childern; } ⭐ Tree class Tree{ public Node root; } 👀 이진트리(binary tree) : 각 노드가 최대 2개의 자식을 갖는 트리 👀 이진 탐색 트리(binary search tree) : 모든 노드가 다음과 같은 특정 순서를 따르는..

[코딩 인터뷰]자료구조 - 스택과 큐 문제(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:..

728x90