일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- OS
- 알고리즘
- 백준
- I/O장치
- 파일시스템 구현
- directx
- 다이나믹프로그래밍
- 프로그래머스
- 스케줄링
- DirectX12
- 디자인패턴
- 타입 객체
- 락
- 병행성 관련 오류
- 다이나믹 프로그래밍
- 운영체제
- Direct12
- 영속성
- DirectX 12
- 그리디알고리즘
- 쓰레드
- 컨디션 변수
- 그리디 알고리즘
- 멀티쓰레드
- codility
- 멀티프로세서
- 자료구조
- 렌더링 파이프라인
- 병행성
- 동적계획법
- Today
- Total
목록Algorithm (111)
기록공간

해결 방법 뭔가 획기적인 방법이 있지 않을까 계속 생각해봤지만, 그냥 순차적인 방법으로 풀 수 밖에 없는 문제이다. 점수의 합계를 구하는 방법은 다음과 같다. 1. 문자가 나오기 시작할때까지(즉, 숫자를 제외한) 임시 문자열에 담는다. 2. 문자가 나오면 임시 문자열에 담았던 값들을 숫자로 변환한다. 3. 문자가 (S, D, T)이면 변환한 숫자를 알맞게 제곱(1제곱, 2제곱, 3제곱) 해준다. 4. 문자가 (#, *)일 경우 4-1. (*) 일 경우 현재 숫자와 그 이전 숫자를 곱해준다. 4-2. (#) 일 경우 현재 숫자에 -1을 곱해준다. 하지만 이 방법만 사용한다면 이전 숫자를 알 수도 없고 총 점수를 구할 수도 없다. 즉 이 점수들을 기록할 만한 컨테이너가 필요하다. 컨테이너를 배열이든 리스트든..

import java.util.*; public class Solution { public int solution(int n) { int ans = 1; while(n > 1) { if(n % 2 == 1) ++ans; n /= 2; } return ans; } }

해결 방법 소수를 빠르게 구하기 위해 에라토스테네스의 채 방법을 적용하고 있으니, 궁금한 사람은 다음 링크를 먼저 참고하자. 소수 찾기 (프로그래머스) - Java 해결 방법 class Solution { public int solution(int n) { int answer = 0; for(int i = 2; i

해결 방법 각 번호의 배수가 되는 최소의 값을 찾는 문제이다. N개의 최소 공배수를 구하기 위해서는 N중 가장 큰 값의 배수에 맞추어 나머지 배수들을 검사하는 방법을 생각해볼 수 있다. 풀이 과정은 다음과 같다. [2, 6, 8, 14] 가장 큰 값은 14이다. -> 14 * 1 = 14 2, 14는 배수이지만 나머지 6, 8이 배수가 아님 => X -> 14 * 2 = 28 2, 14는 배수이지만 나머지 6, 8이 배수가 아님 => X -> 14 * 3 = 32 2, 8, 14는 배수이지만 나머지 6이 배수가 아님 => X ... -> 14 * 12 = 168 2, 6, 8, 14 모두의 배수 => O 가장 최초로 나오는 모든 배수를 만족하는 값이 최소 공배수가 된다. 구현 코드는 다음과 같다. cla..

문제와 내용은 "프로그래밍 대회에서 배우는 알고리즘 문제해결 전략" 책을 참고하였습니다. 알고리즘 문제 해결 전략 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략, 구종만 지음, 인사이트, ISBN 978-89-6626-054-6 새 소식 책 소개 은 새로운 알고리즘 책입니다. 종이에 적힌 의사코드 book.algospot.com 이것을 풀기 위한 가장 간단한 방법은 완전 탐색을 이용해, 단어를 찾아낼 때까지 모든 인접한 칸을 하나씩 시도해 보는 것이다. 그중 한 칸에서라도 단어를 찾을 수 있으면 성공이고, 어느 칸을 선택하더라도 답이 없다면 실패가 된다. 문제의 분할 hasWord()가 하는 일을 가장 자연스럽게 조각내는 방법은 각 글자를 하나의 조각으로 만드는 것이다. 함수 호출 시에 단어의 시작..

해결 방법 동적계획법을 사용해볼 생각을 해봤지만 전혀 접근방법이 안떠올랐다. 한참을 고민했지만 그저 정직하게 풀면 풀리는 문제였다. sum이라는 변수에 1부터 시작해서 차례대로 n이 될때까지 더해준다. 만약 sum이 n이 된다면 그것은 연속한 자연수들로 표현할 수 있는 방법이므로 result를 하나 증가시킨다. 만약 sum이 n을 넘어가면 표현 불가능한 방법으로 다음 시작점부터 시작하면 된다. 이 작업은 시작점을 1에서부터 n / 2까지 진행하면 된다. n / 2까지만 진행하는 이유는 그 이후 숫자들을 시작점으로 놓으면 어떤 경우라도 sum이 n을 넘어가기 때문이다. n / 2까지만 진행하므로 한 숫자(n 자기자신)로 표현하는 방법은 따로 생각해줘야 하므로 result를 1부터 시작한다. n = 15 r..

해결 방법 class Solution { public int solution(int n) { int answer = 0; for(int i = 2; i

에라토스테네스의 체란? 에라토스테네스의 체는 소수를 찾는 방법 중 하나이다. 고대 그리스 수학자 에라토스테네스가 발견했다. 원리 위 그림과 같이 동작하는데, 정리를 해보면 다음과 같다. 2의 배수부터 시작한다고 했을때 2 * 2부터 구하려는 범위(여기서는 120)까지 2의 배수가 있으면 걸러낸다. 작업1 을 n^2 > m (m : 소수를 구하려는 범위)을 만족하는 n의 배수까지 반복한다. (여기서는 120이기 때문에 11^2 > 120을 만족하므로 n은 11이다) 그리고 걸러내지 않은 나머지 값들이 소수가 된다. 구현 구현 코드는 다음과 같다. void Eratos(int m) { // 만약 m이 1보다 작거나 같으면 함수 종료 if(m