이 글의 코드와 정보들은 대학 수업
컴퓨터망프로그래밍
과목을 공부하면서 정리한 내용입니다.
국제표준화기구(ISO)에서 개발한 모델이다.
컴퓨터 네트워크 프로토콜 디자인과 통신을 7계층으로 나누어 설명한다.
각 계층은 하위 계층의 기능만을 이용, 상위 계층에게 기능을 제공한다.
레퍼런스 모델
역할
전기적, 기계적 특성을 이용해서 통신 케이블로 데이터를 전송한다.
통신 단위는 비트(0, 1)
데이터를 전달하는 기능이다.(어떤 데이터인지는 관여하지 않는다)
장비 - 통신 케이블, 리피터, 허브 등
누군가가 나의 GitHub 주소를 방문할 때
내가 어떤 분야에 공부하고 있고, 어떤 기술을 가졌는지
보다 쉬운 이해를 위해서 (+나의 프로필을 꾸미고 싶어서) 만들게 되었다.
(현재) 결과물 : 나의 GitHub README.md(2023.02.06)
repository name을 github user name(본인의 계정 이름)으로 입력하면, special
repository를 확인할 수 있다.
Github 접속 -> Repository
-> New
클릭한 후 Repository name
밑에 본인의 계정 이름을 입력하면 된다.
그 밑에 Public
부분과 Add a README file
클릭하고 확인 버튼을 누른다. (README.md 파일은 직접 만들어도 된다)
확인 버튼을 클릭하게 되면 다음과 같이 새로운 repository가 생성되고 README.md 파일에 Hi there 👋이 보인다.
이제 이 README.md
파일에서 본인이 원하는 대로 수정해서 프로필 영역을 만들어 나가면 된다.
Readme Header : capsule-render에 가서 Markdown
아래에 있는 코드를 복사한다.
복사한 코드 : ![header](https://capsule-render.vercel.app/api?type=wave&color=auto&height=300§ion=header&text=capsule%20render&fontSize=90)
해당 코드를 본인의 README.md
파일에 붙여넣기를 하는데, text=
뒤에 하고 싶은 이름 혹은 제목을 써주면 된다.
그 밖에 본인에게 맞는 type
, color
, height
, fontSize
, fontAlign
등등 값을 지정해주면 된다.
메모리: 76 MB, 시간: 0.36 ms
코딩테스트 연습 > 정렬
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int h = 0;
int max = 0;
//1.
Arrays.sort(citations);
//2.
for(int i = 0; i < citations.length; i++) {
//2-1
int smaller = Math.min(citations[i], citations.length-i);
//2-2
if(smaller >= answer) {
answer = Math.max(answer, smaller);
}
else {
break;
}
}
//3.
return answer;
}
}
전체 논문의 인용횟수를 값으로 가진 배열에서 전체 n편 중 h편의 논문이 h회 이상 인용되었을 때
h의 최대값인 H-Index을 구하는 문제다.
논문 수의 n과 H-Index가 될 수 있는 h의 관계는 h <= n
으로 표현할 수 있다.
인용횟수 배열을 정렬한다.
인용횟수 배열 요소 값을 차례로 h로 지정하며 H-Index 조건에 부합하는지 확인한다.
h의 최대값을 구하기 때문에 h
는 논문의 최대 수인 n부터 -1씩 감소하는 것으로 시작한다(citations.length-i)
[2-1]조건: 현재(해당 요소) 논문의 인용횟수(citations[i])
>= h회 이상 인용된 논문 개수(citations.length-i)
현재 논문의 인용횟수
와 현재 논문보다 인용횟수가 크거나 같은 논문의 개수
두 값 중 작은 값이 H-Index로 지정되어야
“전체 n편 중 h편의 논문이 h회 이상 인용”이라는 말이 무조건 참이 되므로
[2-2]두 값 중 최소값을 갖는 임시 H-Index 값을 지정하고, 오름차순으로 정렬된 요소들에 차례대로 접근하여 최대값을 갱신해 나간다.
더 이상 값이 증가하지 않고, 감소되는 구간에서는 반복을 중지한다(최대값을 구하기 때문)
조건에 부합하는 h의 값들 중 최대값인 H-Index
를 출력한다.
처음에는 제대로 이해가 되질 않아서 바로 그림을 그려나가니까, 이해가 되었다.
2번 조건에 부합하는 것을 코드로 옮기는 작업이 오래 걸렸지만, 이해와 또 다른 알고리즘을 알게 되어서 좋았다.
문제에 대한 이해와 어떻게 풀어야하는 지 알기 시작한 이후부터는 최대한 메모리와 시간을 최소화하기 위해 효율적으로 구현하려고 노력했다.
import java.util.*;
public class Solution {
public int solution(int n) {
int ans = 0;
while(n != 0) {
if(n % 2 == 0) {
n /= 2;
} else {
n -= 1;
ans++;
}
}
return ans;
}
}
이동하는 방법1,2 : [1] 한 번에 K칸을 앞으로 점프하는 방법 / [2] (현재까지 온 거리) X 2에 해당하는 위치로 순간이동하는 방법
점프
는 건전지 사용량이 들고, 순간이동
은 건전지 사용량이 줄지 않는다.건전지 사용량의 최솟값을 만들기 위해서는 최대한 아이언 슈트를 착용하고 순간이동
을 하는 방법을 활용하고, 필요할 때에만 점프
방법을 사용한다.
[결론]
N이 0이 될 때까지
N이 짝수라면 반을 나누고 N / 2 (순간이동)
N이 홀수라면 -1을 빼며 점프하여 최솟값을 구한다.
N이 6일 때 6까지 최대한 순간이동
방법을 써서 건전지의 사용량의 최솟값을 구하면 되는 문제였다.
아이디어는 6부터 시작해서 0까지 가는 Top-Down 방식으로 사용하면 간단하게 풀 수 있는 문제였는데,
아이디어가 바로 떠오르지 않아서 고민한 시간이 꽤 길었다. (20~30분)
머리로 떠오르지 않으면 그림을 그려보자!
우아한테크코스의 캡틴으로 불리는 박재성
님이 0순위로 추천한 책이다.
책을 읽고 난 소감은 개발과 관련해서 더 나은 개발자가 되기 위한 마인드
위주의 책이었다.
이 책은 개인적인 일화와 현장 경험에서 비롯된 무게감 있는 조건이 가득했다.
자신의 일에 자부심을 갖는 프로페셔널로 도약하기 위해 필요한 계획, 전략, 태도, 원칙 등을 여러 가지 관점에서 조언했다.
책을 읽으면서 내가 생각한 중요한 부분이나 기억해야 할 부분들을 정리해봤다.
개발자라면 다음과 같은 여러가지를 할 수 있어야 한다.
고객과 대화하기
테스트/배포 자동화하기
전체 비즈니스에 영향을 미칠 기술 선정하기
지리적으로 분산된 팀들과 협업하기
고객을 도와 필요한 작업을 정의하기
우선순위 선정하기
진척 상황 보고하기
변경사항과 기대일정 관리하기
잠재 고객 및 파트너에게 제품 소개하기
사전 영업 활동 지원하기
개발 일정과 비용 산출하기
채용 면접하기
아키텍쳐 설계하기
비기능적 요구사항과 계약조건(SLAS) 검토하기
사업 목표 이해하기
주어진 여건에서 최적의 결정하기
새로운 기술 주시하기
더 나은 업무 방식 찾기
고객에게 가치 있는 상품이 전달되고 있는지 고민하기
어떤 사람들은 훌륭한 개발자
라면 위의 일들을 이미 해왔을 거라고 한다.
애자일
은 서로 다른 여러 맥락에서 따른 방법론과 테크닉의 조합이다.
애자일 원칙의 절차적인 부분
들은 팀과 조직이 어떻게 구성되고 협업해야 하는지에 대한 것들을 규정한다.
회의 방식, 구성원 각각의 역할, 요구사항 파악 방법, 작업 진척 속도 파악 방법, 점진적/반복적으로 일할 때 취하는 방식 등과 같은 것들이다.
팀에 정말로 중요한 것, 비즈니스 가치가 있는 것에 집중한다.
애자일 원칙의 기술적인 부분
들은 개발, 확장, 유지보수, 제품을 출하면서 어려움들에 대해 특정한 기술적 관례나 기술 자체를 매우 구체적으로 가이드한다.