본문 바로가기

전체 글

(276)
Computer Structure - Sub Memory 이 블로그는 '최신 컴퓨터 구조 - 임석규 홍경호'를 참고하여 제작하였습니다. 1. 자기 디스크 2. 자기 테이프와 자기 드럼 (자기 드럼 생략) 3. 광 기억 장치 (생략) 4. RAID 5. SSD (생략) 1. 자기 디스크 1-1. 자기 기억 장치의 동작 원리 - 강 자성체를 이용한다. - 정보 쓰기 : 헤드에 전류를 흘려 자기장이 만들어지면 트랙이 헤드와 반대 극성으로 자화된다. - 정보 읽기 : 트랙을 이동시켜 헤드를 통과하는 자기장이 변하면 헤드에 유도 전류가 흐르는 원리를 이용한다. 1-2. 자기디스크의 표면 구조 - 강 자성체로 코딩되어 있고 하드 디스크라고도 부른다. 1. 단일 헤드 디스크 : 헤드가 하나인 디스크 2. 다중 헤드 디스크 : 헤드가 여러개 존재하는 디스크 1-3. 자기디스..
Programmers - 2개 이하로 다른 비트 with JAVA (V) 문제 십진수가 주어지고 해당 수보다 큰 수 중에서 2진수로 변환했을 때, 해당 수와 해당 수보다 큰 수의 비트 차이가 2개 이하인 수들 중 가장 작은 수를 구하라. 로직 이 문제는 3가지를 고려해주면 된다. 1. 해당 수가 4로 나눴을 때 3이 아닌가? -> 이런 경우는 1을 더해주면 문제 조건에 맞는 수를 찾을 수 있다. 2. 모두 1인가? -> 예를 들어, 11111 이 있다고 가정하자. -> 해당 수에 1을 더하면 100000이 될 것이다. -> 이 때, 가장 앞자리 10은 고정하고 나머지를 맞추는게 가장 최소이면서 2개 이하 차이나는 수이다. 101111 -> 로직 : 0을 포함하는지 확인 - 10을 앞자리로 설정 - 나머지는 길이에 맞추어 1로 채움 3. 모두 1은 아닌가? -> 예를 들어, 1..
Computer Structure - Memory 이 블로그는 '최신 컴퓨터 구조 - 임석구, 홍경호'를 참고하였습니다. 1. 기억 장치 시스템의 개요 2. 주기억 장치 3. 캐시 기억 장치 4. 가상 기억 장치 5. 연관 기억 장치 (생략) 6. 최신 기억 장치 기술 (생략) 1. 기억 장치 시스템의 개요 1-1. 위치에 따른 분류 - 컴퓨터 내부 또는 외부로 분류 - 내부 : 주기억 장치, CPU의 레지스터 - 외부 : 자기디스크, 자기테이프 1-2. 용량에 따른 분류 - 바이트나 워드로 나타냄. - 워드는 보통 CPU가 한번에. 처리할 수 있는 명령어의 비트 수로 설정 - 바이트는 보통 외부 기억장치들이 사용 1-3. 전송 단위에 따른 분류 - 내부 장치에서 전송 단위 : 기억 장치로 들어가고 나오는 데이터선의 수, 보통 워드길이와 같거나 다름 -..
Programmers - 뒤에 있는 큰 수 찾기 with JAVA (V) 문제 예를 들어, [1, 2, 3, 4, 5] 가 있을 때, 해당 수보다 뒤에있으면서 가장 가깝고 해당 수보다 큰 수를 구하고 없으면 -1을 넣은 결과를 출력하라. 로직 1. 결과를 모두 -1로 초기화한다. 2. 스택에 해당 인덱스 값을 순차적으로 넣는다. 3. 스택 마지막부터 확인하면서(후입 선출) 현재 값보다 꺼낸 인덱스에 해당하는 값이 작다면 스택에서 해당 수를 빼고 결과를 현재 값으로 설정함을 반복한다. (만약, 전의 값이 크다면 종료) 4. 위의 과정을 반복한다. 대략 시간 복잡도는 O(N)에 가능하다. 예시 : [9, 1, 5, 3, 6, 2] Stack - Value - result [0] - [9] - [-1, -1, -1, -1, -1, -1] [0, 1] - [9, 1] - [-1, -..
Programmers - 숫자 짝궁 with JAVA 문제 문자열 X,Y가 주어졌을 때, X와 Y 중 겹치는 숫자를 활용해 만들 수 있는 최대값을 구하라 로직 1. 문자열은 각 자리가 0~9로 이루어져있다. 우선적으로, X 내부의 9의 개수, 8의 개수 등을 구하여 배열로 저장한다. (연산 수 : 300만, 누적 : 300만) 2. Y를 체크하는데 만약 위에서 구한 배열에 해당 숫자가 0이라면 다음 숫자를 체크하고 0이 아니라면 1을 빼주고 결과 배열에 저장한다. (연산 수 : 300만, 누적 : 600만) 3. 결과 배열을 9부터 0까지 확인하며 StringBuilder에 추가한다. (연산 수 : 300만, 누적 : 900만) 고찰 - StringBuilder대신 + 연산자로 3번의 과정을 거쳐서 시간에서 넘쳤다. - 기본적으로 String의 + 연산자는..
Programmers - 게임 맵 최단 거리 with JAVA (V) 전형적인 DFS/BFS 문제이긴 하나 조건 설정에 따라 효율성이 달라진다. 그 부분을 기록해보고자 한다. 사용 : BFS 효율성 증가 : 방문처리, 목표지 방문시 종료 처리 로직 및 코드 import java.util.*; class Solution { public int solution(int[][] maps) { int n = maps.length; int m = maps[0].length; int[] dx = {-1, 0, 1, 0}; int[] dy = {0, -1, 0, 1}; for(int i=0; i= m){ continue; } if(maps[next_x][next_y] == -1){ continue; } if(maps[next_x][next_y] < next_cost){ continue;..
Spring - Image Save 이번 블로그에서는 이미지를 저장하는 방법에 대해서 정리해보고자 한다. API를 하나 작성하면서 이미지 저장에 대해서 알아보고자 하는데 기본적인 API 과정은 다음과 같다. 1. 클라이언트가 이미지 입력 2. 이미지 인코딩해서 전송 3. 서버에서 이미지 디코딩 4. DB에 저장 또는 파일 시스템에 저장 1. 클라이언트가 이미지 전송 테스팅을 위해 직접 프론트를 만들 수 있지만 insomnia의 multipart로 데이터를 전송받아 테스팅을 하였다. Multipart Form을 사용하면 Key-Value 형태로 서버에 데이터 전송이 가능한데 이미지 전송 또한 가능하다. 2. 이미지 인코딩해서 전송 기본적으로 이미지는 바이너리 형태의 데이터로 저장되어 있다. 보통 네트워크를 통해 이미지 파일을 서버에 전송시 ..
Programmers - 기사단원의 무기 with JAVA 문제 1번부터 N번까지 번호를 가진 기사들이 존재하고 각 번호의 약수의 개수만큼의 파워를 가진 무기를 소유가능하다. 하지만 limit보다 약수의 개수가 크다면 해당 기사는 power 크기의 무게만 가질 수 있을 때, 각 기사들의 무기 파워의 합은? 로직 1. 각 번호들의 약수의 개수를 구한다. (약수의 개수를 구하는 가장 효율적인 알고리즘은 해당 수의 제곱근까지만 체크하는 방법이다.) 2. limit보다 크면 power, 작으면 count를 answer에 더한다. 코드 import java.util.*; class Solution { public int solution(int number, int limit, int power) { int answer = 1; for(int i=2; i