목록분류 전체보기 (178)
한 걸음씩 기록하며
MySQL의 ORM 중 하나인 Sequelize를 공부하다가, MongoDB의 Mongoose가 ORM이 아닌, ODM이라는 것을 알게되었다. 그리고 곰곰히 생각해보니 ORM은 Object-Relational Mapping인데, MongoDB는 관계 설정이 없으니 ORM이 아닌게 맞구나 라는 생각을 하게되었다. 그래서 오늘은 ODM에 대해서 살짝 정리해보고자 한다. ODM (Object Data Mapping) ORM이란 무엇인가 편에서 살펴보았듯이, ORM은 기본적으로 객체 지향 패러다임을 이용하여 RDBMS에 대한 작업을 수행하는 역할을 담당한다. https://haksae.tistory.com/131?category=958700 [ORM]이란 무엇인가 1. ORM ORM이란 Object-Relati..
과거에는 CPU와 메모리가 같은 속도로 작업을 했지만, 컴퓨터 하드웨어의 발전에 따라 CPU는 기하급수적으로 빨라졌지만, 메모리가 그 성능을 따라오지 못하는 비효율의 문제가 대두되었다. 이러한 문제를 해결하고자 컴퓨터 구조에서는 메모리의 계층을 분리하여 가장 빠른 메모리인 레지스터를 프로세스 데이터 패스 안에 넣고, 메모리에서 레지스터로 미리 데이터를 보내놓는 방식으로 속도 차이의 문제를 완화 시키는 방법을 사용한다. 메모리 계층(Memory Hierachy) 메모리의 성능에 차등이 있기 떄문에, 성능과 필요와 목적에 따라 여러가지 종류로 나누어 두는 것을 메모리 계층이라고 한다. 메모리 계층은 컴퓨터의 설계에 있어 각각의 특징이 있는 서로 다른 여러 종류의 저장 장치를 함께 사용하여 최적의 효율을 낸다..
⛏ 문제 파악 주어진 수식을, 연산자의 우선순위를 부여하여 가장 큰 값으로 만드는 문제 (절대값) 순열 조합과 브루트 포스로 풀면 된다. 👉🏻 답안 import re from itertools import permutations def solution(expression): answer = 0 operation_list = list()#수식 안에 연산자들이 있는지 확인 (시간복잡도를 줄이기 위해) if '*' in expression: operation_list.append('*') if '+' in expression: operation_list.append('+') if '-' in expression: operation_list.append('-') operation_permutations = l..
⛏ 문제 파악 양 편의 다리 놓기 적절한 장소의 숫자를 제공한 뒤, 다리를 놓을 수 있는 경우의 수를 구하는 문제 조합론으로 풀면 간단하다. 👉🏻 답안 from math import factorial T = int(input()) result = 0 for _ in range(T): N, M = map(int, input().split(' ')) if N == M: result = 1 elif N > M: result = factorial(N) // (factorial(N-M) * factorial(M)) elif M > N: result = factorial(M) // (factorial(M-N) * factorial(N)) print(result) 📑 간단한 설명 우선 사랑스러운 파이썬의 math를..
⛏ 문제 파악 가장 작은 생성자를 구하는 문제 (분해합의 생성) 브루트 포스 방식으로 풀면 된다. 👉🏻 답안 N = int(input()) number = 1 while True: if N < number : number = 0 break temp = 0 for i in range(len(str(number))): temp += int(str(number)[i]) if number + temp == N: break number += 1 print(number) 📑 간단한 설명 자기 전에 빨리 풀려고 그냥 글을 코드로 바로 적어서.. while을 돌리고 안에 for문을 넣어서 진짜 브루트 포스 방식으로 풀었다. 다만 너무 비효율적인 것 같아서 다른 답안들을 보니, 생각해보니 굳이 while을 왜 썼지 내..
⛏ 문제 파악 새로운 블랙잭! N개의 카드가 주어지고, 그 중 3장을 뽑아 제시된 숫자 M과 가장 가까운 숫자를 만드는 알고리즘 브루트 포스 방식으로 풀면 된다. 👉🏻 답안 from sys import stdin N, M = map(int, input().split(' ')) cards = list(map(int, stdin.readline().split(' '))) length = len(cards) result = 0 for i in range(0,length): for j in range(i+1,length): for k in range(j+1,length): sum = cards[i]+cards[j]+cards[k] if M >= sum: result = max(result,sum) print(..
오늘 아래의 문제를 풀기 위해 브루트 포스 알고리즘 방법을 사용했다. 브루트 포스로 문제를 풀었으니, 본 글은 브루트 포스를 정리하고자 한다. https://haksae.tistory.com/187?category=948102 [백준] 1436번 영화감독 숌 ⛏ 문제 파악 숌이라는 영화감독이 666이라는 제목으로 작품을 만들어간다 할 때, N번째 작품명을 출력하는 문제 문제의 핵심은 666이 붙어있어야한다는 점. 즉 7번째 작품일 때 6666이 아니라 6660 haksae.tistory.com 1. Brute Force란? Brute : 무식한, 짐승, 동물 Force : 힘 이름에서 느껴지듯이, 매우 단순 무식한 알고리즘 방법으로, 완전 탐색 알고리즘이다. 즉 문제를 해결하기 위해서, 가능한 모든 경..
⛏ 문제 파악 숌이라는 영화감독이 666이라는 제목으로 작품을 만들어간다 할 때, N번째 작품명을 출력하는 문제 문제의 핵심은 666이 붙어있어야한다는 점. 즉 7번째 작품일 때 6666이 아니라 6660이어야 한다는 점이다. 문제 해결을 위해 브루트 포스(완전 탐색)을 사용했다. 브루트 포스에 대한 글은 따로 작성하겠다. 👉🏻 답안 N = int(input()) title = 666 count = 0 while True: if '666' in str(title): count += 1 if count == N: break title += 1 print(title) 📑 간단한 설명 665까지는 탐색하지 않아도 되기에, 666부터 title += 1 하였고 '666'이 속해있으면 count += 1을 하였..