메모리 계층구조 메모리 계층구조를 보면, 위로 갈수록 빠르지만 비싸고, 밑으로 내려갈수록 느리지만 저렴해지는 특징이 있다. 지금 제가 쓰는 맥북은 12MB의 Cache Memory에 16GB의 DRAM, 256GB의 SSD를 사용하고 있다. 12MB의 캐쉬메모리는 매우 빠르지만 용량이 너무 작아 DB로 쓰기에는 무리가 있다. 그리고 256GB의 SSD는 용량이 크고, 비휘발성이라 컴퓨터가 꺼져도 데이터를 잃지 않기 때문에 일반적인 DB에 사용이 된다. 하지만 SSD는 위 계층들보다 느려서 요청이 많으면 매번 디스크에 접근하여 부하가 걸려 느려질 수 있다는 문제가 있다. 그래서 적당히 빠르면서도 적당히 비싸며, 용량도 DB로 쓰기에 적당한 메인 메모리(DRAM)를 사용하는 데이터베이스를 in-memory ..
분류 전체보기
https://www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 처음에 어떻게 풀지 하다가 그래도 구글링 하기 전까지 50%는 다 풀어놨었다 좀 더 시간 들였으면 다 풀었을 텐데 아쉽 일단 1. 백트래킹 + 2. 가로, 세로, 3*3칸 체크하기. 이 2개가 큰 흐름이고 여기까진 알았다. 근데 난 구현이 약한가보다 문제 푸는 순서는 다음과 같다. 9*9칸의 보드판을 2차원 배열에 입력받고 그 중 0인 칸을 따로 모아둔 후 백트래킹으로 0인 칸을 전부 돌면서..
https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 동적 계획법, 그중에 상향식(Tabulation)으로 풀었다. 처음에는 백트래킹으로 풀어봤는데 시간초과가 났다. 메모리가 4MB 밖에 안 되어서 dp는 아니겠다 싶었는데 dp로 푸는 거였다. 풀이에 사용하는 변수들과 입력이다. N, K는 각각 동전 개수와 만들어야 하는 금액이며, 동전을 받기 위해 리스트를 만들어 입력해주었고, 동적 계획법으로 푸므로 dp를 0부터 K를 범위로 하는 정수 배열로 선언..
https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 맨 밑에 전체 코드 있습니다. 문제설명 텀 프로젝트를 위해 학생들은 서로 팀을 이뤄야 한다. 팀의 조건은 다음과 같다. . 한 학생은 1명의 학생을 가리켜야 한다. 자기자신도 상관 없다. 학생들이 서로 가리키다가 싸이클이 형성되면 하나의 팀이 된다. 이때 자기자신을 가리키면 혼자 한 팀이다. 출력은 팀을 이루지 못한 학생 수이다 학생번호 1 2 3 4 5 6 7 학생이 가리킨 학생번호 3 1 3 7 3..
1. 깃 브랜칭 전략 우리가 깃과 깃허브를 사용할 때 보통 혼자 개발하게 되면 레포지토리의 master 브랜치 하나에 작성한 코드를 기록한다. 이는 자신만의 규칙들을 정하고 그것을 따르기만 하면 문제가 생기지 않는다. 하지만 팀으로 프로젝트를 진행하면서 하나의 레포지토리에 코드를 기록하다 보면 배포용, 개발용의 구분과 같이 브랜치를 여러 개로 관리할 필요가 생기고, 이 브랜치를 규칙 없이 무분별하게 사용하게 되면 어떤 브랜치가 언제, 무엇을 위해 생성됐으며, 삭제되어야 하는데 방치되고 있는지, 아니면 이후 필요한 브랜치인지 정확히 알기 어렵다. 이에 따라서 깃 브랜칭 전략이 나오게 되었다. Git Branching 전략이란, 다수의 개발자가 1개의 저장소를 효과적으로 사용하기 위한 work flow이다...
https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net """ 빙산 (Gold 4) https://www.acmicpc.net/problem/2573 """ from collections import deque N, M = map(int, input().split()) # N * M 배열 board = [list(map(int, input().split())) for _ in range(N)] dd = [(-1, 0), (1, 0), (0, -1..
https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net """ 적록색약 (Gold 5) https://www.acmicpc.net/problem/10026 """ from collections import deque N = int(input()) # N 입력받음. ( N * N ) board = [input() for _ in range(N)] # 적록색약 아닌 사람의 그래프 board_blind = [row.replace("R", "G") f..
https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net """ 텀 프로젝트 (Gold 3) https://www.acmicpc.net/problem/9466 """ import sys sys.setrecursionlimit(10 ** 7) # 파이썬의 최대 재귀 실행 횟수는 정해져 있으므로 해금해줘야함 def dfs(x): global cycle_count visited[x] = True # 현재 학생(노드) 방문 체크 (테스트 케이스 동안 유지되는 변수)..
1990년대 중반, 웹사이트는 모두 Static site, 즉 정적 웹사이트여서 서버에 이미 만들어져있는 HTML 문서를 브라우저에서 요청이 올 때마다 꺼내어 주는 형태였다. 그러다가 90년대 후반~ 2000년대 초반까지 도입된 기술들(iframe, XMLHttpRequest, AJAX 등)은 하나의 HTML 문서에서 서비스를 제공할 수 있게 했고, 또 php나 jsp 같은 기술들은 서버에서 HTML을 재구성하여 보내줄 수 있게 되었다. 여기서 하나의 HTML 문서에서 다른 페이지로의 이동 없이 서비스를 제공하는 웹사이트를 SPA(Single Page Application) 이라고 하고, 위의 기술들(AJAX)을 이용하여 첫 HTML 문서만 받은 후로는 필요한 데이터를 서버로부터 받아 문서 내의 일부만을..