분류 전체보기

    [선형대수] 행렬 방정식

    [선형대수] 행렬 방정식

    행렬이란? 행렬은 행과 열을 가지고 있는 것을 의미합니다. 지난시간에 알아본 벡터를 활용하여 행렬을 표현할 수도 있습니다. $\mathbb{R}^n$의 차원을 가지는 벡터 $\vec{a_1},\vec{a_2},\vec{a_3} \cdots\vec{a_n}$가 있다고 할 때 벡터를 각 열로 판단한다면 아래와 같이 표현될 수 있습니다. $$ \mathcal{A}x =\begin{bmatrix} \vec{a_1} & \vec{a_2} & \vec{a_3} \ \dots \ \vec{a_n} \end{bmatrix} \begin{bmatrix} x_1 \\ \vdots \\ x_n \end{bmatrix} = x_1\vec{a_1} + x_2\vec{a_2} + x_3\vec{a_3} \cdots x_n\vec..

    [선형대수] Vector와 linear combination

    [선형대수] Vector와 linear combination

    Vector와 Scalar Vector와 Scalar를 아마 물리시간에 처음 접했던 것 같습니다. 벡터는 방향과 크기를 가지는 값이고 스칼라는 크기만 가지는 값이라고 배웠습니다. 이번시간에는 벡터를 활용한 선형대수에 대하여 배워보기 위해 벡터를 조금 깊게 이해하고 linear combination을 알아보도록 하겠습니다. Vector는 $\vec{a}$로 위에 화살표를 작성하여 표시합니다. 선형대수에서는 볼드체로 문자를 작성하여 $a$와 같이 표현하기도 합니다. $\mathbb{R^2}$ 차원의 벡터라는 의미는 실수 2차원의 벡터를 의미합니다. 그 벡터는 아래와 같이 표현할 수 있습니다. $$ \vec{a} = \begin{bmatrix}x_1 \\ x_2 \end{bmatrix} $$ 이 벡터 값의 의..

    [선형대수] Row Reduction과 Echelon Forms

    [선형대수] Row Reduction과 Echelon Forms

    nonzero와 leading entry Echelon form은 linear system을 편리하게 해결하는 Row Reduction 알고리즘을 수행하기 위해 알아야하는 구조입니다. Echelon form을 알기 위해서는 nonzero와 leading entry에 대하여 알아야합니다. nonzero는 말 그대로 0이 아닌 것을 의미합니다. 즉 nonzero row는 0으로만 이루어지지 않은 행을 의미합니다. 즉 행의 원소중 하나이상은 0이 아닌 값을 지니고 있어야합니다. nonzero column은 열의 원소중 하나 이상은 0이 아닌 값을 지니고 있는 것을 의미합니다. leading entry는 nonzero row에서 0이 아닌 수 중에서 가장 왼쪽에 있는 값을 의미합니다. $$ \begin{bmat..

    [선형대수] System of Linear Equations이란?

    [선형대수] System of Linear Equations이란?

    Linear Equation? Linear Equation은 선형 방정식을 말합니다. 이렇게 $a_1x_1+a_2x_2 +\cdots+a_nx_n = b$ 일차식으로 나타나는 값을 의미합니다. $x$가 1차가 아닌 다른 차수를 갖는다면 선형방정식이라고 할 수 없습니다. 이 때 앞에 표시되는 계수 $a_1, a_2, \cdots a_n$은 실수혹은 허수가 올 수 있습니다. 그리고 이러한 계수들을 coefficient라고 부릅니다. System of linear Equations? System of linear Equation(줄여서 linear system이라고도 합니다.)은 선형방정식들의 해를 구하기 위해 하나 이상의 선형방정식들을 모아놓은 것을 의미합니다. $$ x_1 - 2x_2 = 7 $$ $$ x..

    파이썬스러운 코드 개발(PEP-8)

    파이썬스러운 코드 개발(PEP-8)

    클린 코드의 중요성 우리가 코드를 개발하는 이유는 무엇일까? 학교에서 코드를 작성하는 목적은 컴퓨터에 명령을 하기 위해서라고 배웠었다. 하지만 나는 최근 개발공부를 하며 컴퓨터에게 더욱 잘 명령을 내리기 위한 공부를 한다기보다는 다른 개발자분들이 나의 코드를 잘 이해할 수 있도록 짜기위해 노력한다. 나는 다른 개발자분들이 잘 이해할 수 있는 코드를 클린코드라고 생각한다. 클린한 코드를 개발하면 다른 개발자분이 나의 코드를 유지보수하는데 코드를 이해하는 시간을 줄일 수 있어 기술부채를 최소화할 수 있다. PEP-8이란? Java도 변수명, 클래스명에 대한 명명규칙과 같은 표준 코딩스타일이 있다. 그와 같이 파이썬도 PEP-8이라는 표준 코딩스타일을 가지고 있다. 이는 이미 파이썬 구문의 많은 특수성을 고려..

    글또 7기를 시작하며

    글또 7기를 시작하며

    글또 7기를 시작하며 처음 글을 쓰기 시작한 것은 4년전 인턴생활을 할 때 였다. 인턴생활을 기록하기 위해 블로그를 개설하고 블로그 글을 쓰기 시작하였다. 인턴생활이 종료되니 자연스럽게 블로그에 포스팅을 멈추며 글을 쓰는 습관은 자연스럽게 내 몸속에서 잊혀져갔다. 최근 개발자로 취업준비를 진행하며 글을 작성하는 것이 학업에 많은 도움을 준다고 느꼈고 다른 사람들이 나의 글을 읽고 도움을 줄 수 있다는 뿌듯함을 느끼며 다시 글을 쓰기 시작하였다. 하지만 최근 상반기 취업준비를 하다보니 블로그에 글을 쓰는것에 소홀해졌다. 상반기도 끝나가는 시즌에 주기적으로 블로그 글을 작성하는 습관을 들이기 위하여 글또에 지원하게 되었다. 의무적으로 글도 쓸 수 있고 실력있는 개발자분들이 넘쳐나셔서 유익한 글들을 읽을 수 ..

    [PGM] 구명보트 (java)

    [PGM] 구명보트 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 Greedy 1. 문제 이해 구명보트를 활용하여 무인도에 갖힌 사람들을 구출할 때 구명보트를 최소한으로 사용한다면 몇개의 구명보트면 구할 수 있을지를 구하는 문제이다. 이 때 구명보트에는 최대 2명의 사람과 제한무게 이하로 탑승할 수 있다. 2. 접근방법 Greedy한 접근을 하면 문제를 ..

    [PGM] 주식 가격 (Java)

    [PGM] 주식 가격 (Java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 우선순위 큐 1. 문제 이해 초 단위로 기록되어있는 주식의 가격에 대한 정보가 들어있는 int형 배열이 input으로 들어올 때 그 가격이 떨어지지 않은 기간이 몇 초인지 return 하는 문제이다. 2. 접근방법 우선순위 큐를 활용하여 문제를 해결할 수 있다. 우선 순위 큐..

    [PGM_12981]  영어 끝말잇기 (Java)

    [PGM_12981] 영어 끝말잇기 (Java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/12981 코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 Set 1. 문제 이해 n명의 사람이 ..

    [PGM_77885] 2개 이하로 다른 비트 (Java)

    [PGM_77885] 2개 이하로 다른 비트 (Java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/77885?language=java 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 비트연산자 1. 문제 이해 $f(x)$ = $x$ 보다는 크지만 비트 2개만 변경된 값 중 최소값으로 정의되는 함수 $f$가 있을 때, $f(x)$의 값을 구해주는 문제이다. 2. 접근방법 bit연산자인 &연산자를 사용하여 문제를 해결할 수 있다. &연산자는 and연산으로 a & b에서 불 대수 a,b가 모두 1인 경우만 1이다. 비트 두개만 변경하여 최소가 되기 위해서는 가장 작은 위치의 0값을 찾아 1로 바꾸어주고 가장 작은 위치 바로 아래의 1을 0으로 ..

    [PGM_42883] 큰 수 만들기 (Java)

    [PGM_42883] 큰 수 만들기 (Java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 탐욕 알고리즘 1. 문제 이해 숫자 number와 지워지는 문자의 개수 k가 주어질 때 가장 큰 값으로 지워지게 만들어주는 경우를 구해주는 문제이다. number k return "1924" 2 "94" "1231234" 3 "3234" "4177252841" 4 "775841" 위 예시를 보면 알 수 있듯이 1924에서 2개의 수를 지웠을 때 가장 큰 값은 94이고, 1231234에서 3개의 수를 지웠을 때 가장 큰 수는 3234임을 알 수 있다. 2. 접근방법 문제는 굉장히 이해하기 쉽지만..

    [PGM_42583] 다리를 지나가는 트럭

    [PGM_42583] 다리를 지나가는 트럭

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 큐 1. 문제 이해 모든 트럭이 다리를 지나가는데 걸리는 시간을 구하는 문제이다. 이 때 트럭이 지나가는 다리의 길이와 가능한 무게가 주어진다. 트럭 한대가 지나가는데 걸리는 시간은 다리의 길이이다. 그리고 트럭이 올라갈 수 있는 한계는 다리의 길이만큼과 다리가 버틸 수 있는 무게의 이하일..

    Java의 BigInteger를 알아보자.

    Java의 BigInteger를 알아보자.

    22.03.12 SK ICT 코테를 보고 충격에 빠졌다.. 4문제 중 2솔.. 2번과 4번만 맞추고 떨어진것 같다.. 솔직히 3번은 쉽게 풀수 있겠다고 생각하고 도전했던 DP문제인데, 값이 너무 커질수 밖에 없다고 생각해서 long을 써서 해결하려고 하였는데 결국 실패했다. 근데 1번은 왜 나중에 풀려고 아껴둔거지?(아직도 자신에게 의문) 코테가 끝나고, Java의 자료형에 대한 공부를 하다가 BigInteger를 알게 되었다..(좀 더 빨리 알았으면 3번을 금방 풀었을텐데..) BigInteger Class의 범위는? Big Integer의 클래스의 범위는 무한대다. 예전에 자료구조 수업을 처음 들을 때 첫 과제가 BigInt라는 자료형을 만들어보는 문제였는데, 그게 사실 Java에서 지원해주는 api..

    [PGM_17679] 프렌즈 4블록

    [PGM_17679] 프렌즈 4블록

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 구현 1. 문제 이해 프렌즈 4블록 게임은 2x2로 이루어진 블록이 제거되는 게임이다. 위 그림을 보면 라이언과 콘이 2x2로 겹쳐있는 것을 볼 수 있다. 이 경우 해당하는 블록을 제거해주며 된다. 이 때 라이언처럼 겹치게 2x2를 만족하면 겹치는 부분을 포함하여 제거해줄 수 있다는 것을 주의..

    [PGM_12978] 배달  (java)

    [PGM_12978] 배달 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 구현 1. 문제 이해 주어지는 파라미터로 정수인 N과 K 그리고 int형 이차원 배열 road가 주어진다. N은 마을의 개수 K는 특정 임계값 그리고 road는 마을과 마을 사이의 길에 대한 정보가 들어있는 배열이다. road의 첫번째 값은 첫번째 마을, 두번째 값은 두번째 마을 마지막으로 ..

    Java8의 Annotation

    Java8의 Annotation

    Annotation의 변화 Java8의 Annoataion 제너릭 타입 선언부에 선언이 가능하다. 중복해서 사용이 가능하다. Annoation 다양한 위치에 선언하기 Annotaiton을 다양한 위치에 선언하기 위해서는 @Target을 정의해주어야한다. @Target(ElementType.TYPE_PARAMETER) // Generic Type으로 선언 가능 @Target(ElementType.TYPE_USE) // Type선언하는 모든 곳에서 사용 public @interface Chicken { } ElementType.TYPE_PARAMETER : 제너릭의 Type parameter에 선언이 가능하게 해준다. static class FeelsLikeChicken{ public static void ..

    [PGM_76502] 괄호 회전하기 (java)

    [PGM_76502] 괄호 회전하기 (java)

    문제링크 https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 문제풀이 👨🏻‍💻 핵심 스킬 👨🏻‍💻 구현 1. 문제 이해 괄호로 이루어진 String이 주어졌을 때 해당 괄호를 회전해서 올바른 괄호가 될 수 있는 경우의 수를 구하는 문제이다. 이 때 회전할 수 있는 크기는 주어진 String의 길이만큼만 가능하다. 2. 접근방법 A와 B가 올바른 괄호 문자열이라면 AB도 올바른 괄호 문자열이다. 따라서 우리는 올바른 최소한의 단위의 괄호 문자열들을 구해주면 된다. String의 길이만큼 회전할 수 있다는 뜻은 한바퀴만 돌 수 있다는 의미와 같다. 따라서 최소단위의 올바른 괄호 문자열들로 이루..

    CompletableFuture로 비동기 프로그래밍 공부하기!

    CompletableFuture로 비동기 프로그래밍 공부하기!

    CompletableFuture Future에서도 어느정도 비동기 프로그래밍을 가능하게 만들어 주었지만, 부족한 부분이 많았다. get()을 사용하여 블로킹을 통해서만 콜백을 실행시킬 수 없다. Future들을 조합하는 것에 있어서 제한된다. (과목의 정보를 가져온 뒤 그 과목을 수강하는 학생들을 가져오는 것이 제한된다.) 예외처리가 불가능하다. 이러한 문제점을 해결하고 좀 더 완벽한 비동기 프로그래밍을 위해 Java8에 새로 추가된 인터페이스가 CompletableFuture이다. CompletableFuture 생성 CompletableFuture future = new CompletableFuture(); future.complete("jins"); future.get(); //String jins..