분류 전체보기 300

[코딩 인터뷰]자료구조 - 스택과 큐

[ 스택 구현하기 ] 👀 스택 : 제한적으로 접근할 수 있는 나열 구조로 LIFO(Last-In-First-Out)에 따라 자료를 배열합니다. 재귀 알고리즘을 사용할 때 유용하게 사용됩니다. ⭐ LIFO : 가장 최근에 추가한 항목이 가장 먼저 제거될 항목 ⭐ 재귀 알고리즘을 사용할 때 임시 데이터를 스택에 넣어놓고 재귀 함수 완료 후 스택에 넣어 두었던 임시 데이터를 빼는 형식으로 주로 사용됩니다. 👀 Java로 구현 public class MyStack{ private static class StackNode{ private T data; private StackNode next; public StackNode(T data){ this.data = data; } } private StackNode t..

[코딩 인터뷰]자료구조 - 연결리스트 문제(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..

[코딩 인터뷰]자료구조 - 연결리스트

👀 연결리스트 : 차례로 연결된 노드를 표현해주는 자료구조 장점 : 리스트의 시작 지점에서 아이템을 추가하거나 삭제하는 연산을 상수 시간에 할 수 있습니다. 단점 : 배열처럼 특정 인덱스를 상수 시간에 접근할 수 없습니다. [ 연결리스트 만들기 ] 아래의 코드에선 LinkedList 자료구조를 사용하지 않았습니다. 그리고 연결리스트에 접근할 때 head 노드의 주소를 참조하는 방법을 사용했기 때문에 여러 객체들이 동시에 연결리스트를 참조하는 도중에 head가 바뀌면 오류가 발생할 수 있습니다. ⭐ Java class Node { Node next = null; int data; public Node(int d){ data = d; } void appendToTail(int d){ Node end = ne..

큰거문고새의 소리

'이지유의 이지 사이언스'라는 책을 읽으면서 신기한 동물들을 봤지만 기록해두고 싶은 새를 또 발견하였습니다. 이 새의 이름은 '큰거문고새'로 동물의 소리는 물론이고 공사장 중장비의 소리, 카메라 셔터음, 자동차 경고음 및 전기톱의 소리까지 따라하는 새입니다! "따라해봤자 새 소리 비슷하겠지"라고 생각해보았는데 정말 똑같은 소리라서 블로그에 글을 쓰게 되었습니다. '큰거문고새'는 금조라고도 불리며 호주 남동부 숲에서 발견되는 호주 고유종입니다. 긴 꼬리를 가진 생김새로 공작처럼 생겼는데 참새목에 속하는 새로, 참새목 중에서는 3번째로 크다고합니다. 이 새가 소리를 모사하는 이유는 다른 경쟁자나 천적을 속이려고 주변 소리를 따라한다고 합니다. 그래서 소음공해가 심한 공사 현장이나 도시 같은 시끄러운 곳에서 ..

[코딩 인터뷰]자료구조 - 배열과 문자열 문제(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)..

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

[ 해시 테이블 ] : 효율적인 탐색을 위한 자료구조로서 키(key)를 값(value)에 대응 👀 구현 방식 1. 연결리스트와 해시코드함수 : 탐색 시간 O(1) 더보기 ✔️ 키와 값 삽입법 키의 해시 코드 계산 키의 자료형은 보통 int 혹은 long인데, 키의 개수는 무한한데 반해 int의 개수는 유한하기 때문에 서로 다른 두 개의 키가 같은 해시 코드를 가리킬 수 있습니다. 해시 코드를 이용하여 배열의 인덱스 계산 서로 다른 두 개의 해시 코드가 같은 인덱스를 가리킬 수도 있습니다. 키와 값을 해당 인덱스에 저장 배열의 각 인덱스에는 키와 값으로 이루어진 연결리스트가 존재합니다. 충돌에 대비해서 반드시 연결리스트를 이용해야합니다. ⭐ 충돌 : 서로 다른 두 개의 키가 같은 해시 코드를 가리키거나 서..

[부산] 해리단길 맛집 '엡섬'

안녕하세요, 주말에 친구와 '엡섬'이라는 양식집에 다녀왔습니다. 양식을 한식만큼 좋아하지 않는 편이고 가격 또한 저렴한 편은 아니지만 또 먹고 싶은 메뉴가 있을 만큼 맛있는 집이었습니다. 그럼 바로 '엡섬'에서 먹어 본 음식에 대한 후기를 작성해보도록 하겠습니다. '엡섬'은 지하철 해운대역 4번 출구에서 예전 해운대역으로 약 4분정도 걸으면 쉽게 찾을 수 있는 곳에 위치해있습니다. 주말의 경우 사람들이 많은 곳이나 운이 좋았던 것인지 내부에는 식사를 하시는 손님은 2분만 계셨습니다. 입구를 들어서면 바로 오른쪽에 주방이 보이는 구조입니다.(주방쪽은 아무래도... 일하고 계셔서 사진을 찍지 못했습니다.) 그리고 안쪽으로 들어가면 테이블이 있습니다. 내부는 깔끔한 편이고 옷을 걸 수 있는 옷걸이도 존재하지만..

[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