Lv3. 길찾기 게임
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/challenges?order=acceptance_desc&levels=2%2C3%2C4&languages=java&page=7 코딩테스트 연습 | 프로그래머스 스쿨개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!school.programmers.co.kr   주어진 노드 좌표 정보를 이용해 이진 트리를 구성하고, 전위 순회와 후위 순회를 통해 결과를 반환하는 문제다. 먼저 노드 정보를 객체로 변환하고,y값을 기준으로 내림차순, x값을 기준으로 오름차순으로 정렬한다. 이 정렬된 순서대로 첫 번째 노드를 루트로 설정하고 나머지..
컴퓨터 시스템의 심장, 메모리 관리 전략
·
CS/운영체제
메모리 관리 전략을 이해하는 건 백엔드 개발자에게 꼭 필요하다.효율적인 메모리 관리는 애플리케이션 성능을 높이고,자원을 아끼는 데 큰 도움이 되기 때문이다.서버는 동시에 많은 사용자 요청을 처리해야 하기 때문에,메모리 할당과 회수를 잘 관리하는 게 성능과 안정성에 직접적인 영향을 준다.메모리 관리를 통해 메모리 누수 같은 문제를 예방해 시스템의 장기적인 안정성을 보장할 수 있다그럼 메모리 관리 전략에 대해서 알아보자. 메모리 관리의 중요성 컴퓨터 시스템에서 메모리 관리는 핵심적인 역할을 수행한다. 모든 컴퓨터 응용 프로그램은 실행을 위해 메모리를 필요로 하며, 이를 효율적으로 관리하는 것이 시스템의 성능과 안정성을 결정짓는 중요한 요소다. 메모리 관리는 사용 가능한 메모리 리소스를 할당하고, 불필요하게..
b.17298 오큰수
·
Algorithm & Data Structures/BOJ
https://www.acmicpc.net/problem/17298   이 문제는 배열의 각 원소에 대해"오큰수(오른쪽에 있는 수 중 현재 수보다 큰 수 중 가장 가까운 것)"를 구하는 문제다.먼저 main 메서드에서 프로그램 실행의 흐름을 살펴보면,사용자로부터 입력값을 받아 배열에 저장한 후 logic 메서드를 호출해오큰수를 계산한 뒤 결과를 출력한다.사용자는 먼저 배열의 크기 N을 입력하고,다음 줄에 배열의 원소를 공백으로 구분하여 입력한다.이후 logic 메서드를 호출하여 오큰수를 계산한다. logic 메서드는 스택을 사용하여 효율적으로 오큰수를 구하는 핵심 부분이다.이 알고리즘은 반복문을 통해 배열을 순회하면서현재 원소와 스택에 저장된 인덱스를 비교한다. 스택에는 아직 오큰수가 결정되지 않은 인덱..
Lv2. 혼자 놀기의 달인
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/131130 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  while 문을 활용한 DFS로 풀이하였다.이번 문제는 cards[] 배열이 주워질 때, 랜덤으로 어떠한 두 박스를 고른다.두박스 안에는 박스번호와 박스안의 카드번호가 주워지는데 카드번호를 통해 다음박스 를 열게되고 그 박스안의 카드번호에 해당하는 박스를 다시 여는반복을 통해 cycle을 측정한 다음2가지 cycle의 크기 가 최대가 될 수 있는값을 구하는 문제다. 우선 boolean[] isVisited 를 활용하여 방문체크를 해주고반복문..
PCB?
·
CS/운영체제
프로세스 제어 블록(PCB, Process Control Block)은 운영 체제의 핵심 구성 요소 중 하나로,각 프로세스를 관리하고 추적하기 위해 설계된 데이터 구조다. PCB는 단순히 프로세스의 정보를 저장하는 역할뿐만 아니라, 운영 체제가 프로세스를 효율적으로 관리하고 CPU의 활용을 극대화하는 데 필수적인 기능을 제공한다. 이번 글에서는 PCB의 구조, 역할, 그리고 문맥 교환(Context Switching)에서의 중요성을 심층적으로 살펴보자. PCB란 무엇인가?PCB는 운영 체제가 각 프로세스를 관리하기 위해 사용하는 데이터 구조다. 운영 체제는 멀티태스킹 환경에서 수많은 프로세스를 동시에 실행해야 하며, 각 프로세스의 상태와 정보를 효과적으로 관리해야 한다. PCB는 프로세스와 관련된 모든 ..
리눅스 vs 윈도우
·
CS/운영체제
운영체제에 대해 공부를 하다 보니언뜻 궁금한 것이 리눅스와 윈도우 두가지중리눅스운영체제가 개발에 있어 더욱자주 또 많이 쓰인다는 것을 느꼈다.왜 리눅스가 더 많이 쓰일까?윈도우는 왜 개발환경에 적합하지 않을까?두 운영체제의 차이가 무엇일까? 라는 의문에 도달하였고개발자로서 당연히 가질수 있는 의문이기에 이에 대해 공부할 필요성을 느꼈다. 운영체제의 기본 개념운영체제에 대해서는 정리해놓은 블로그 글이 있다. 아래 글을 참고하도록 하고 오늘은 리눅스와 윈도우의 차이점에 대해서 집중 조명 해 보자. https://geishastory.tistory.com/248 운영체제란?운영체제를 왜 알아야 할까?운영체제는 사용자를 위한 프로그램이라기보다프로그램을 위한 프로그램이라고 보는것이 맞다.그렇기에 프로그램을 만드는..
b.2293 동전 1
·
Algorithm & Data Structures/BOJ
https://www.acmicpc.net/problem/2293   이 문제는 dp를 활용하여 N가짓 수의 동전이 주어졌을때K의 값을 몇가지 방법으로 나타낼 수 있는지 즉 몇가지 조합으로K값을 나타낼 수 있는지에 대한 경우의수를 묻는 문제다. k가 3이면 2,1 과 1,2 가 있는데 이는 순서만 다르기에 같은경우의 수로 취급한다. 이문제를 보자 2차원 DP 배열을 생각해 낼 수 있었다.dp [i][j] 는 i까지 동전을 사용했을 때 나타낼 수 있는 경우의 수로 정의하고dp[0][j]에서 0은 coins[0]이므로 0까지의 동전이아니라 coins[0] 동전만 사용했을때경우의 수가 된다. 이를 통해 점화식을 세워 봤을 때,  dp[i][j] = dp[i-1][j];if (j >= coins[i]) { ..
Lv 4. 도둑질
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/42897 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이전에 한번 풀어본 유형의 DP 유형이었기에 쉽게풀이할 수 있었다.  첫집과 끝집은 연결되어 있기 때문에dp 배열을 2가지 종류로 나누어야했는데, dp1은 첫집을 포함하는 경우로서 마지막 집의 포함경우를 제외하였고dp2는 첫집을 포함하는 경우를 제외하는경우로서 마지막집의 돈을 포함한 결과이다. 결국 dp[0]은 0으로 설정해 주고 Math.max 함수를 통해dp[i] = Math.max(dp[i-1],dp[i-2]+dp[i]) 라는 점화식을..
시스템 호출?
·
CS/운영체제
애플리케이션은 대량의 데이터 처리와 높은 성능이 요구되는 경우가 많기에,시스템 호출의 원리와 동작 방식을 이해하면 병목 현상을 분석하고 최적화하는 데 큰 도움이 된다.예를 들어, 파일 읽기나 네트워크 요청 처리에서 비효율적인 시스템 호출을 줄이거나, 비동기 I/O 기술을 활용하여 처리 속도를 높이는 방식으로 성능을 개선할 수 있다.또한, 리소스 관리 측면에서도 시스템 호출을 잘못 사용하면 메모리 누수, 파일 디스크립터 부족, 소켓 연결 초과와 같은 문제를 초래할 수 있다.이러한 문제를 예방하고 안정적인 애플리케이션을 설계하려면 시스템 호출의 동작 방식과 에러 처리 메커니즘을 이해해야 한다. 운영 체제와의 효율적인 상호작용을 통해 성능, 안정성, 확장성을 모두 갖춘 서버를 구현하는개발자가 되기 위해 필수적..
b2629. 양팔저울
·
Algorithm & Data Structures/BOJ
https://www.acmicpc.net/problem/2629   문제를 풀기 위해서는 dp[][] 의 규칙을 아는것이 가장 편하다.이 문제의 규칙은 다음과 같다.  1. dp[i][j] 는 boolean[N][M] 으로써 i 번째 추까지 사용했을 때 j무게를 확인할 수있는가 없는가를 나타낸다. 또한 N은 추의갯수 M은 가능한 무게측정범위 즉 15001이 된다. 2. dp[i-1][j] 가 true라면 dp[i][j] 또한 true이다. 3. dp[i-1][ K ] 에서 true가 된다면dp[i][K-i번째 추의 절댓값]과dp[i][K+i번째 추의 절댓값]은 15001을 넘지않으면 true이다. 위의 규칙을 활용하여 나는 init method를 통해 초기화 및 입력을 받았으며logic에서 N번째 추를..