분류 전체보기

· PS/BOJ
이 문제는 주어진 식에서 괄호를 적당히 쳐서 결과를 "최솟값"으로 만드는 것이다. 최솟값을 만드는 방법은 마이너스(-)가 한 번 나오면, 그 이후의 값을 모두 빼버리면 된다. 마이너스(-)가 한 번 나왔으면 isMinus를 true로 바꾸어주고 num에 저장된 숫자를 빼준다. #include #include #include using namespace std; int main() { string S; cin >> S; int ans = 0; string num; bool isMinus = false; for (int i = 0; i
· PS/BOJ
S의 값을 최소화하기 위해서는, A 배열에서 가장 큰 값과 B 배열에서 가장 작은 값을 곱해주어야 최소화 할 수 있다. 따라서, A 배열은 오름차순, B 배열은 내림차순으로 바꾸어 서로 곱하면 된다. #include #include #include using namespace std; int cmp(int x, int y) { return x > y; } int main() { int n, k; cin >> n; int a[51], b[51]; for (int i = 0; i > a[i]; } for (int i = 0; i > b[i]; } sort(a, a+n); sort(b, b+n, cmp); int ans = 0; for (int i ..
· PS/BOJ
이번 문제는 가치의 합이 주어졌을 때 그 합을 이루는 최소한의 동전 개수를 구하는 문제이다. 따라서, 그리디 알고리즘으로 풀 수 있다. 간단하게, 그리디 알고리즘은 각 단계에서 최적의 선택을 하는 방식으로 문제를 해결하는 방식이다. 알고리즘 풀이법은 1단계 선택절차를 통해 현 상태에서 최적의 선택을 하도록 한다. 2단계 적절성 검사를 통해 문제의 조건을 만족하는지 확인한 후 답을 도출한다. 최소한의 동전을 사용하려면, 최대한 가장 화폐단위가 큰 동전을 사용하면 된다. 가치의 합 K를 단위가 가장 큰 동전부터 나누어 개수를 세어주면 된다. #include #include #include using namespace std; int main() { int n, k; cin >> n >> k; vector a..
· PS/BOJ
이번 문제는 정수 N을 입력했을 때 N을 1로 만들기 위해 필요한 최소한의 연산 횟수를 출력하는 문제이다. (N은 1보다 크거나 같다.) 문제에서는 아래의 3가지 조건을 제시했다. 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 무슨 말이냐하면, 1인 경우 그대로 0, 2인 경우 2/2 = 1과 2-1 = 1 두 가지가 존재한다. 다른 예로는 3이 1이 되려면, (3-1)/2 = 1과 3/3 = 1 두 가지가 존재한다. X에 따른 최소 연산 수를 계산해보면, 아래와 같다. 1 2 3 4 5 6 7 8 9 10 0 1 1 2 3 2 3 3 2 3 점화식을 정리해보면, dp[i] = dp[i/2] - 1 dp[i] = dp[i/3] - 1..
· 클라우드
1. Docker 대신 웹 서버를 사용하는 방법 파일 시스템 내의 index.html을 읽을 수 있도록 해야 한다. 1. 웹 서버는 80번 포트에서 접속을 대기하고 있다. 2. 아래의 웹 브라우저 주소를 입력하면 80번 포트로 연결된다. 3. 대기 중인 웹 서버에 요청이 전송된다. 4. 웹 서버는 index.html 파일을 읽어 웹 브라우저에게 index.html 내부 코드를 전송한다. 2. Docker로 웹 서버 구축하기 - 이론 웹 서버를 직접 사용하려면, 운영체제에 웹 서버를 구축해야 한다. 그러나 Docker를 이용하면 훨씬 쉽게 할 수 있다. 아래의 명령어를 사용하면, 웹 서버가 컨테이너에 설치된다. docker run httpd 이러한 컨테이너가 설치된 운영체제가 바로 Docker Host 이..
· 클라우드
1. docker hub에서 이미지 받아오기 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 2. 이미지 Pull 여부 확인 docker images [OPTIONS] [REPOSITORY[:TAG]] 3. 새로운 Container 실행 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 4. 생성한 컨테이너 정보 조회 docker ps 만약, 컨테이너를 하나 더 만들고 싶다면, 아래의 명령어를 실행하면 된다. docker run --name 이름 httpd 아래는 2개의 컨테이너를 실행하여 정보를 조회한 결과이다. 5. 실행중인 컨테이너 사용 중지 docker stop 이름 위는 stop 명령어로 사용을 중지하고 docker ps를 통해 컨테이너를..
· 기타
"The emulator process for avd xxx has terminated error" 안드로이드 스튜디오의 Emulator 오류가 발생해 해결하는 방법을 찾았다. 시도한 방법 1. 환경 변수 재설정 ANROID_HOME을 아래와 같이 설정해 주고, C:\Users\사용자이름\AppData\Local\Android\Sdk 시스템 환경 변수란에도 위와 같은 방식으로 추가한다. 찾아보니, ANDROID platform-tools도 추가하라고 해서 추가했다. 환경변수 설정 후 재부팅하니 그대로 오류가 발생했다. 2. SDK tools 재설치 꼭 필요한 것은 - Android Emulator - Android SDK Platform-Tools - Intel x86 Emulator Accelerato..
· 협업/git
Git Workflow 팀에서 git을 사용해 개발할 때 브랜치를 어떻게 사용할지에 대한 전략 혹은 규칙. Git flow 5개의 브랜치로 관리하고 메인 브랜치인 master, develop, 보조 브랜치인 feature, release, hotfix가 있다. - master : 배포용으로 사용하는 브랜치 - develop : 개발용 default 브랜치, 실제 작동중인 것 다음 버전을 개발하는 브랜치 - feature : 기능 개발 브랜치, 실제로 개발할 때 가장 많이 사용하는 것으로 기능별 브랜치를 생성하고 개발이 완료되면 develop에 병합함. - release : 다음 배포를 위해 기능에 문제가 없는지 확인하는 용도의 브랜치 - hotfix : 배포 후 버그가 발생한 경우 수정하는 브랜치 간단한..
Merge Sort Merge Sort는 하나의 리스트를 부분 리스트로 점차 분할하여 각 부분 리스트를 정렬한 다음 다시 부분 리스트를 합병해 정렬하는 방법이다. 반복적으로 구현하는 방법이 있지만 결론적으로 재귀적인 방법이 효율적이기에 재귀적인 Merge Sort를 소개할 것이다. // 정렬할 리스트를 분할해 2개의 부분 리스트 생성 int rmergeSort(element a[], int link[], int left, int right) { if (left >= right) return left; int mid = (left + right) / 2; return listMerge(a, link, rmergeSort(a, link, left, mid), rmergeSort(a, link, mid+1, ..
Stable Sorting vs Unstable Sorting Stable Sorting은 같은 두 수를 정렬할 때 그 수의 순서가 바뀌지 않고 유지되며 정렬되는 것이다. 반대로 Unstable Sorting은 같은 두 수를 정렬할 때 그 수의 순서가 서로 바뀌면서 정렬되는 것이다. Insertion Sort 삽입 정렬은 정렬된 배열에 한 숫자씩 삽입해 정렬하는 것이다. 정렬된 배열의 뒷부분부터 비교하며, 삽입하려는 수보다 큰 경우에만 인덱스를 줄여 비교한다. 따라서 같은 수인 경우에는 다음 인덱스에 정렬되기 때문에 Stable Sorting이다. void insert(element e, element a[], int i) { a[0] = e; while(e.key < a[i].key) { a[i+1] ..
소-은
'분류 전체보기' 카테고리의 글 목록 (6 Page)