일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 디자인패턴
- 병행성
- DirectX 12
- directx
- 다이나믹 프로그래밍
- 스케줄링
- 컨디션 변수
- 파일시스템 구현
- 렌더링 파이프라인
- 그리디 알고리즘
- 락
- 멀티프로세서
- I/O장치
- 동적계획법
- 멀티쓰레드
- 영속성
- 백준
- 운영체제
- 쓰레드
- 그리디알고리즘
- Direct12
- 병행성 관련 오류
- 타입 객체
- DirectX12
- 프로그래머스
- codility
- 자료구조
- Today
- Total
목록Algorithm/문제 (96)
기록공간

해결 방법 뭔가 획기적인 방법이 있지 않을까 계속 생각해봤지만, 그냥 순차적인 방법으로 풀 수 밖에 없는 문제이다. 점수의 합계를 구하는 방법은 다음과 같다. 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..

해결 방법 동적계획법을 사용해볼 생각을 해봤지만 전혀 접근방법이 안떠올랐다. 한참을 고민했지만 그저 정직하게 풀면 풀리는 문제였다. 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

해결 방법 최대공약수(gcd)는 유클리드 알고리즘을 사용하여 풀었다. 유클리드 알고리즘 (gcd, 최대공약수) 유클리드 알고리즘이란? 유클리드 알고리즘은 주어진 두 수 사이에 존재하는 최대공약수(gcd)를 구하는 알고리즘이다. 원리 유클리드 알고리즘은 다음과 같은 원리로 동작한다. 임의의 두 자연�� lipcoder.tistory.com 최소공배수(lcm)는 두 수의 배수 중에서 가장 작은 값 이므로, 두 수를 곱한 부분에 최대 공약수를 나누어 준 값이 최소공배수가 된다. 코드 구현은 다음과 같다. class Solution { private int gcd(int a, int b) { int c; while(b != 0) { c = a % b; a = b; b = c; } return a; } priva..

해결 방법 특별한 알고리즘을 사용하지 않고 정직하게 푸는 문제였다. 우선 문제를 간단하게 정리해보겠다. 왼쪽 손가락은 '*' 위치에서, 오른쪽 손가락은 '#' 위치에서 시작한다. 키패드를 누르기 위해 손가락은 상하좌우로 1칸씩 움직이며 이동한다. 1, 4, 7 키패드는 왼쪽 손가락이 누른다. 3, 6, 9 키패드는 오른쪽 손가락이 누른다. 2, 5, 8, 0 키패드는 왼쪽과 오른쪽 손가락 중 가장 가까운 거리의 손가락이 누른다. 만약 왼쪽 오른쪽 손가락이 키패드와의 거리가 같다면 손잡이 위치에 따라 결정된다. 우선 손가락에서 키패드까지의 거리를 알기 위해서는 각 키패드의 위치를 지정해 주어야 한다. 위치는 pair를 사용하여 각각 x축 y축으로 사용하였다. 위치를 지정해 주었다면 이제 거리를 구하는 함수..