Git & GitHub
·
CS/GitHub
1. Git과 GitHub의 차이Git컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템GitHubGit 저장소 호스팅을 지원하는 가장 인기 있는 오픈 소스 웹 서비스한 줄로 정리하면, Git은 도구이고 GitHub는 그 도구를 활용한 웹 플랫폼입니다.2. 왜 중요한가?Git의 역할코드의 버전 관리를 용이하게 함여러 사람이 동시에 하나의 프로젝트를 협업할 수 있도록 도움Git이 필요한 이유이전 작업 기록 확인 가능특정 시점으로 되돌아가기 가능협업 시 코드 충돌 관리 가능GitHub의 역할코드 호스팅, 버전 관리 및 협업을 위한 통합 플랫폼 제공GitHub가 필요한 이유전 세계 어디서나 프로젝트 공유 가능여러 개발자가 함께 협업 가능오픈소스..
Java의 메모리 관리
·
CS/Java
1. 메모리 관리란?프로그램에 필요한 저장 공간을 할당하고 해제하는 것목적프로그램 실행에 필요한 데이터를 저장하기 위해 사용효율적인 메모리 사용과 안정성 확보2. C언어 메모리 관리특징개발자가 메모리를 직접 다룰 수 있음대표 함수malloc() : 메모리 할당free() : 할당된 메모리 해제장점중간 과정 없이 직접 다루므로 속도가 빠름메모리 사용 효율이 좋음단점사람이 직접 관리하므로 실수 발생 가능대표적인 문제메모리 누수(Memory Leak) : 사용이 끝난 메모리를 반납하지 않는 문제해제된 메모리 접근 : 이미 free() 한 메모리를 다시 접근하는 문제3. Java 메모리 관리특징JVM 실행 시 운영체제로부터 메모리를 할당받음JVM이 메모리를 관리함즉, Java에서는 개발자가 직접 메모리를 할당하..
컴퓨터 언어 정리
·
CS/Java
1. 컴퓨터 언어란?이진법을 이용하여 논리 연산, 저장을 수행하는 전자 기계와 소통하기 위한 수단컴퓨터와 사람이 의사소통하기 위한 방법명령을 전달하고 결과를 받기 위해 사용됨쉽게 말해, 사람의 말과 컴퓨터의 말이 다르기 때문에 그 둘을 이어주는 번역 도구가 필요하고, 그 역할을 하는 것이 바로 컴퓨터 언어입니다.2. 이진법 (Binary)0과 1이라는 두 개의 숫자를 사용해 수를 나타내는 진법사용하는 이유컴퓨터는 전기적인 신호를 기반으로 동작함전기의 상태를 단순하게 두 가지로 구분 가능열림 → 1닫힘 → 0장점전자 회로 설계가 단순해짐신호 처리 속도가 빨라짐안정성이 높음단점사람이 읽고 이해하기 어려움유지보수가 힘듦3. 기계어 (Machine Language)특징컴퓨터가 직접 이해하는 언어이진수(0과 1)..
Java 기초 정리
·
CS/Java
자바(Java) : 다양한 플랫폼에서 실행될 수 있도록 설계된, 메모리 관리와 강력한 라이브러리 생태계를 갖춘 객체지향 프로그래밍 언어이다.1. 자바의 탄생 배경당시 상황1980년대에는 주로 C와 C++ 을 사용함특히 C언어는 운영체제 및 시스템 개발의 표준처럼 사용됨문제점가전제품과 임베디드 시스템이 발전하면서 다양한 하드웨어 환경이 등장했지만, 다음과 같은 문제들이 존재했습니다.C언어는 절차지향 언어라 프로젝트 규모가 커질수록 유지보수 및 관리가 어려움프로젝트 규모가 커질수록 유지보수가 어려움제조사마다 사용하는 CPU 구조와 기계어 체계가 다름하드웨어마다 별도로 프로그램을 준비해야 하는 번거로움 존재해결 시도썬 마이크로시스템즈(Sun Microsystems) 는 CPU와 운영체제에 상관없이 실행 가능한..
프로그래머스 - H Index (Java)
·
CS/코딩테스트
프로그래머스 H-Index 풀이 과정1트 오답, 2트 정답(수정), 3트 정답(힌트). 조건문의 의미를 이해하는 데 시간이 걸렸다.총 3번의 제출H-Index란, n편의 논문 중 h번 이상 인용된 논문이 h편 이상이고, 나머지 논문이 h번 이하 인용되었을 때 가장 큰 h를 의미한다.1트 (오답)→ 최대 인용 횟수까지 cnt를 증가시키며 완전탐색→ 각 cnt에서 cnt번 이상 인용된 논문 수(more)와 이하인 논문 수(less)를 셈→ more >= cnt && less 이면 answer를 more로 갱신import java.util.*;class Solution { public int solution(int[] citations) { Arrays.sort(citations); ..
프로그래머스 - K번째 수 (JAVA)
·
CS/코딩테스트
프로그래머스 K번째수 풀이 과정1트 정답. 과거 코드와 비교했을 때 Arrays.copyOfRange() 덕분에 훨씬 간결해졌다.총 1번의 제출i번째부터 j번째까지 자르고, 정렬한 뒤 k번째 값을 반환하면 된다.로직 자체는 단순해서 바로 구현했다.1트 (정답)→ commands를 순회하면서 i, j, k를 꺼낸다.→ Arrays.copyOfRange()로 array의 i-1부터 j까지 잘라 새 배열을 만든다.→ Arrays.sort()로 정렬한 뒤 k-1 인덱스 값을 answer에 담는다.import java.util.*;class Solution { public int[] solution(int[] array, int[][] commands) { int[] answer = new in..
프로그래머스 - 가장 큰 수 (JAVA)
·
CS/코딩테스트
프로그래머스 가장 큰 수 풀이 과정스스로 풀지 못했다. 접근 방향은 두 번 바꿨는데 둘 다 코드로 구현하지 못했다.과거 코드(남의 코드)를 참고해서 정답을 냈고, 핵심 로직을 이번에 제대로 이해했다.총 1번의 제출처음엔 만들 수 있는 모든 숫자를 ArrayList에 넣고 내림차순 정렬하면 가장 큰 수가 맨 앞에 오지 않을까라고 단순하게 접근했다.근데 모든 경우의 수는 배열 길이에 따라 너무 커지고, 반복문으로 모든 조합을 만드는 방식 자체가 머릿속에서 정리가 안 됐다.두 번째로 생각한 방법은 정렬 기준 자체를 정의하는 거였다.길이가 같으면 내림차순, 길이가 다르면 두 자리 수의 일의 자리와 한 자리 수를 비교해서 정렬하는 방식이었는데,이것도 코드로 구현하기엔 너무 복잡했다.결국 과거에 참고했던 남의 코드..
프로그래머스 - 디스크 컨트롤러 (JAVA)
·
CS/코딩테스트
프로그래머스 디스크 컨트롤러 풀이 과정 우선순위 큐를 써야 한다는 건 알았는데, 요청 시각 기준 정렬과 현재 시간 관리를 놓쳤다. NullPointer에 너무 많이 걸려서 어느 지점에서 터지는지는 GPT 도움을 받았고, 나머지는 스스로 풀었다. 총 2번의 제출1트 (오답) → 요청 시각 무시, 현재 시간 관리 없이 큐에 전부 넣고 순서대로 처리 2트 (정답) → 요청 시각 기준 정렬 후, 현재 시간에 들어온 작업만 큐에 투입작업 시간이 짧은 것부터 처리하는 SJF(Shortest Job First) 스케줄링 문제라는 걸 파악하고, 소요 시간 기준 최소 힙으로 접근했다. 문제는 "현재 시각에 요청된 작업만 처리 가능하다" 는 조건을 처음엔 제대로 반영하지 못했다.1트 (오답)→ 전체 작업을 처음부터 큐에 ..