전체 글 74

백준 16987(JAVA)

문제 https://www.acmicpc.net/problem/16987 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net 풀이 백트래킹 문제이다. 적절하게 재귀함수를 이용해서 계란을 칠수있는 모든 경우의 수를 파악해야한다. 어떻게 하면 달걀을 집어서 칠 대상 달걀을 고르는 경우를 생각할수있을까? 일단 어떤식으로 할수있는지 간단하게 생각하자. 달걀 a, b, c, d, e 다섯개가 있다고하자. a 를 들고 b를 칠수있다. 그다음은 한칸 오른쪽 달걀을 들어야한다. 치는 대상은 아무거나 하나를 칠수있으..

algorithm 2021.10.12

백준 10971(JAVA)

문제 https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 풀이 백트래킹 문제이다. 재귀함수를 통해서 탐색하되, 가지치기를 통해 경우의 수를 줄여야한다. 재귀함수에대한 이해가 부족하면 풀기어렵다.(백트래킹 기본 N, M문제를 많이 풀어봐야한다 생각함!!) 2차원 배열로 어떠한 도시에서 어떠한 도시로가는 비용이 적혀있다. 외판원이 어떠한 도시에서 출발하여 모든 도시를 돌고 다시 시작한 어떠한 도시로 돌아오는..

algorithm 2021.10.11

백준 15649(JAVA)

문제 풀이 재귀함수로 풀면된다. 재귀함수로 풀다가, 뽑고자하는 M개를 뽑으면 경우를 만들고, return해서 재귀 끝내주고 다시 그 다음 경우를 계속해서 보면된다. 수열은 중복이 되면 안된다는 것에 유의하자. 나는 두가지 방법으로 풀었다. 1) stack을 이용한 풀이 방문한 숫자의 순서를 기록해야 하므로 먼저 방문한 녀석을 순서대로 스택에 담는 형태로 풀었다. 방문한 숫자를 스택에 넣고, 스택의 크기가 M과 같으면 stack에 들어간 순서대로 출력하고, 다시 스택에서 빼고.. (스택에 해당 수가 있으면 다음 숫자 탐색) 를 반복해서 풀었따. 2) visited boolean 배열과, 결과를 담을 result int 배열 중복에 대한 처리는 visited boolean 배열을 통해 하였다. 그리고 탐색한..

algorithm 2021.10.04

[OS] 운영체제 File system

OS가 파일을 어떻게 관리하는지 알아보자. 그렇기 위해선 파일시스템이 뭔지, 파일이 어디에 저장되는지 등을 알아야겠다. 먼저 파일이 저장되는 보조기억장치인 Disk에 대해서 알아보자.(HDD -기준) Disk System 데이터를 영구적으로 저장하는 저장 장치이다. 비 휘발성이라는 특징을 가졌다.(영구적이므로.) 파일은 이 디스크에(보조기억장치)에 저장된다. 디스크는 이렇게 Disk Pack이라는 장치로 이루어져있다. 위에서 Disk Pack을 보면 이렇게 생겼고, 각 섹터(섹터가 뭔지는 바로 아래서 알아볼것!) 마다 번호가 있는 것을 알수 있다. 스포하자면 이 섹터에 데이터가 저장된다. Disk Pack 실제로 데이터가 디스크에 저장되는 하드웨어이다. 어떻게 구성되어 있는지 알아보자. 먼저 원들이 여러..

computer science 2021.10.04

백준 1541(JAVA)

문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 제일 작은 수가 되려면 -가 나오고 뒤에 +들이 나오면 -(a + b + c + d +...)만 고려하면 된다. 처음에 나는 split이 생각나지않아, 결과 스택과 버퍼 스택을 만들어서, -가 나온다음 뒤에 +들이 나오면 버퍼 스택에 다 넣고 다시 - 가나오면 버퍼스택의 값들 다 더해서 - 붙인 값을 결과 스택에 넣고.. 이런 복잡한 방법으로 풀려 노력했다. 그냥 문자열 split..

algorithm 2021.09.30

[객체지향의 사실과 오해] 7. 함께 모으기

실제로 객체지향적으로 설계를 처음부터 끝까지 해보자. 그리고 객체지향 설계를 세가지 관점에서 바라보아 보자. 커피 전문점 어디서나 볼수 있는 동네 카페에서 손님이 커피를 주문해서 받는 과정까지를 객체지향적으로 설계해보자. 객체 생각하기 큰 시스템을 객체들로 구성되었다 생각하고 객체들로 나누어보자. 손님 - 손님 객체 메뉴판 - 메뉴판 객체 메뉴 - 메뉴 객체 바리스타 - 바리스타 객체 커피 - 커피 객체 객체간 관계 생각해보기 손님은 바리스타에게 주문해야함 : 손님 - 바리스타 관계 O 손님은 주문하기 위해선 메뉴판에서 메뉴를 골라야함 : 손님 - 메뉴판 관계 O 메뉴판에있는 메뉴들중 몇개를 먹을 커피를 골라야하므로 : 메뉴판 - 메뉴 관계 O 바리스타가 손님으로부터 주문받은 메뉴를 커피로 만들어야함 :..

study with book 2021.09.27

백준 11052(JAVA)

문제 https://www.acmicpc.net/problem/11052 풀이 민규는 N개의 카드를 사는데 최대 가격을 지불해야한다. 최초 시도할때 나의 생각은 N개의 카드를 산다하면 1개가든 팩 N개, 1개가 든 팩 N - 1개 + 2개가 든 팩 1개, 1개가든 팩 N - 2개 + 2개가 든 팩 2개, ... 이런식으로 경우의수를 모두 구해서 최대값을 구해야하나? 즉 브루트포스로 풀어야하나란 생각을 했다. 이렇게 생각하니 어떻게 풀어야할지도 모르겠고 막막했다. 그래서, dp를 통해서 풀자! 라는 생각을 했다. i개의 카드를 사기위해 최대 가격을 지불해야한다. 이미 dp테이블에 1부터 i - 1까지 카드를 살때 최대 가격이 적혀져있다고 가정하자. 그렇다면, i개를 사기 위해 따져봐야하는 경우는 dp[1]..

algorithm 2021.09.27

[OS] 운영체제 Virtual Memory Management

어떻게 하면 가상메모리를 잘 관리하여 가상메모리 시스템 성능을 '최적화'를 시킬수 있는지 알아보자! 지금부터 말하는 기법은 paging 기법을 토대로 말할것, segmentation도 가상메모리 관리 관련해선 동일하기에.. 가상메모리의 Cost model 가상메모리의 성능을 높이기 위한 지표로는 다양한 것이 있지만 그중 가장 대표적인 Page fault frequency(발생빈도) Page fault rate(발생률) 두 가지가 존재한다. (address mapping 공부할때, residence bit가 0이면 page fault로 context switching을 통한 높은 오버헤드가 발생하기에 성능에 영향을 크게 미친다고 알고있다.) 즉, 'Page fault'를 최소화 하는 것이 가상메모리의 성능..

computer science 2021.09.19

ec2에 mysql server를 이용해서 spring boot서버를 배포해보자.

안녕하세요. 다들 aws의 RDS제품을 이용해서 DB서버를 구축하지만, 저는 하나의 인스턴스에 mysql 서버와, spring boot서버를 배포해 보겠습니다. 글이 많이 없기도하고, 특히 ./gradlew build시 발생하는 에러를 해결하기 위해 삽질을 많이해서 해결법 등을 적어볼게요. ec2에 인스턴스 만들기 저는 unbuntu 18(프리티어) 인스턴스를 만들었구요! 보안규칙은 ssh는 왠만하면 본인 ip로하구, http, https는 anywhere로 하였습니다! 이 과정은 너무간단하기에 생략합니다.(모르시면 생활코딩을 참고하세요!) ubuntu 18에서 mysql-server 설치하구 외부에서 mysql-server에 접속하기 sudo su 를 통해서 슈퍼유저로 접속합니다. apt-get upd..

개발 2021.09.16

[객체지향의 사실과 오해] 6. 객체지도

지도는 변경될수 있는 세세한 건물의 이름, 마트 정보등을 나타내는 것이 아닌 잘 변하지 않는 안정적인 지형 정보를 기반으로 되어있다. 그렇기에 지도는 예전부터 많이 변한것이 없고, 우리는 이 지도를 통해서 목적지까지 어렵지 않게 갈수 있다. 지도는 안정적인 지형 정보를 기반으로 만들었기에 예전 지도가 지금까지도 사용이 가능한 것이다. 시간이 지나면 아이스크림 가게가 신발가게로 금방 변하고, 건물이 사라지기도 한다. 그러나 지형정보는 잘변하지 않는다. SW도 사용자의 요구사항은 안타깝게도 자주 변한다. 그렇기에 요구사항에 맞춰서 설계를 하면 금방 설계를 뒤엎어야 할것이다.(바뀔 수도 있기에, 아니 무조건 바뀐다.) 우리는 지도와 마찬가지로 구조를 중심으로 먼저 설계하고 그 위에 기능을 넣어야한다. 그러면 ..

study with book 2021.09.13