최단거리 : 다익스트라 Dijkstra (Python)
·
PS 기록/Algorithm
다익스트라(또는 데이크스트라) 알고리즘은 특정한 시작점에서 다른 모든 점들로 가는 최단거리를 구하는 알고리즘이다. 그래프 내에서 시작점과 연결되지 않은 노드가 있을 수도 있다. (최단 거리를 구할 수 없는 노드) 이렇게 연결되지 않은 경우를 나타내기 위해 거리를 나타내는 배열 dist = [ ] 의 초기 값을 INF (매우 큰 수)로 설정해주는 것이 일반적이다. 물론, 여러 간선의 가중치 합이 아무리 커도 INF 보다는 작을 것이라는 제한 조건이 붙어야 한다. 이렇게 구현하면, if dist[node] == INF 일 때, 시작점과 해당 노드가 서로 연결되지 않아서 최단 거리를 구할 수 없다는 뜻이 된다. 본격적으로 다익스트라 코드를 구현해보자. 제대로 공부하기 전에 구현된 코드를 복사해서 쓰지 말고, ..
6. 객체 지향 프로그래밍
·
Java Spring
1. 객체 지향 프로그래밍이란? 더 나은 프로그램을 만들기 위해 로직을 객체 중심으로 짜는 것 객체 : 상태(state) / 행위(behave) 로 이루어진 하나의 물건이라고 볼 수 있다. 객체라는 한국어 단어가 와닿지 않을 때는 just Object 라고 받아들이자. 사실은 편하고 쉬운 개념이다. 여러 가지 객체들을 조립하여 하나의 프로그램으로 만드는 것을 객체 지향 프로그래밍이라고 한다. 2. 설계와 추상화 설계 : 좋은 객체를 만들기 위해 설계가 꼭 필요하다. 설계를 잘할수록 더 나은 프로그램을 만들 수 있다. 현실의 복잡함 속에서 필요한 부분, 관점만 찾아내고 쉽게 바꾼다면 더 효율적일 것이다. 위와 같은 행위를 추상화라고 한다. 객체 지향 프로그래밍은 현실의 객체 (Object) 를 프로그래밍에..
5. 메소드, 입출력
·
Java Spring
메소드나 객체지향과 같은 개념은 규모가 크고, 결함이 적고 유지 보수가 쉬운 프로그램을 만들기 위해 꼭 필요한 개념이다. 1. 메소드 코드를 재사용하게 해준다. 로직을 잘 짜서 활용하면 매우 경제적이다. 메소드의 정의 : 접근 제한자 (public, private), 함수 반환 타입, 함수 이름 등을 주의하여 호출한다. 메소드의 호출 : 메인 함수에 원하는 자리에 불러오면 된다. 2. 매개변수와 인자 메소드를 작성할 때, 메소드로 매개변수를 설정하고, main에서 인자를 보내면 메소드를 통해 자신이 원하는 결과를 얻을 수 있다 메소드를 다 실행하고 return 할 때, return 타입을 맞추는 것이 중요하다. return 타입은 메소드를 작성할 때 처음부터 설정해주어야 한다. 처음부터 타입을 설정하는게..
4. 반복문, 배열
·
Java Spring
1. while while(조건) { } : 소괄호 안에 조건을 만족하는 동안 (true 인 동안) 반복문이 실행된다. 조건문을 잘못 설정하거나, while 문 내부에 루프 종료 조건을 제대로 설정해주지 않으면 에러가 발생한다. 무한루프 돌지 않게 조심할 것 2. for for (초기화 ; 종료 조건 ; 증감 등 변화 조건) { } : 소괄호 안에 쓰인 형식을 만족해야 에러가 발생하지 않는다. 초기화 부분은 반복문이 실행될 때 처음, 한 번 실행된다. 초기화 후 종료 조건이 실행되며, 이 조건이 false가 될 때 까지 반복문이 돌아간다. class Main { public static void main(String[] args) { int i = 0; while(i
3. 비교, 조건문, 연산자
·
Java Spring
1. 연산자 산술 연산자 : 수식 계산이나 문자열 합치기 등에 사용되는 연산자. (+ - * / % 등이 있음) 형변환 : (정수 / 정수 = 정수) (실수 / 실수 = 실수) (정수 / 실수 = 실수) (실수 / 정수 = 실수) 단항 연산자 : 하나의 항을 대상으로 하는 연산자 (+ - ++ --) 등이 있으며 특히 증감을 나타내는 연산자는 많이 쓰이며, 위치에 따라서 증감의 순서가 바뀐다. println(); 에서 쓸 때 순서에 주의하자. 연산자의 우선 순위 2. 비교와 Boolean Boolean : 참과 거짓을 의미하는 데이터 타입 비교 연산자(관계 연산자) : 좌항과 우항의 대소비교를 할 때 쓰인다. .equals : 문자열 비교시에 쓰이는 메소드 class Main { public static..
이진 탐색 Binary Search (Python)
·
PS 기록/Algorithm
이진 탐색은 이미 순서대로 정렬된 arr에서, 특정 값을 보다 빠르게 찾기 위해서 사용되는 방법이다. 처음부터 차례대로 탐색하는 순차탐색 O(N) 과 다르게, 중앙값 mid 를 기준으로 나눈 arr에서 target이 앞/뒤 중 어디에 위치하는지를 찾는다. 이진 탐색의 시간 복잡도는 O(log N) 으로, 보다 빠른 탐색이 필요한 PS에서 유용한 라이브러리로 사용할 수 있다. 이진 탐색 함수를 짤 때 두 가지 방법으로 짤 수 있다. 하나는 재귀적으로, 남은 하나는 반복적으로 짜는 방법이다. 간단하게 PS 용으로 쓰기 위해서는 반복적인 방법을 주로 사용한다. 코드 짜기 쉽고, Python의 재귀 깊이를 고려하지 않기 위함이다. 또한, 이진 탐색 코드를 짤 때 주의할 점이 있다. (1) 탐색을 진행할 arr가..
이화 멘토링 데이 (IT 현직 선배님들과) [23.03.25]
·
IT - 취업 DB
보호되어 있는 글입니다.
1. Kotlin 시작하기
·
Kotlin
더보기 1. 변수 선언 lateinit 으로 선언한 변수는 선언과 동시에 초기값을 할당하지 않아도 괜찮다. 하지만 사용할 수 있는 유형이 한정되어 있다. (ex. String 타입) Int, Long, Short, Double, Float, Boolean, Byte 타입에는 lateinit을 사용할 수 없다. 변수를 선언할 때 val data4: Int by lazy { } 를 사용하면, 나중에 data4가 제일 처음 호출되었을 때, { } 안에 있는게 실행되면서 초기값을 넣어준다. lazy 문의 중괄호 부분을 여러 줄로 작성하면, 마지막 줄의 실행 결과가 변수의 초기값이 된다. lateinit var data3: String val data4: Int by lazy{ println("in lazy.....
2. Data Type
·
Java Spring
더보기 1. Java의 Data Type 이전에 Python을 자주 사용해서 변수 타입을 명시적으로 선언 하는 것과 Overflow에 대해서 크게 신경쓰지 않고 있었는데, Java를 리뷰하면서 관련 개념을 혼동하지 않도록 다시 정리하겠다. Data Type Memory Range byte 1 byte -128 ~ 127 short 2 byte -32,768 ~ 32,767 int 4 byte -2,147,483,648 ~ 2,147,483,647 long 8 byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 Data Type Memory float 4 byte double 8 byte 들어 갈 수 있는 실수 Range가 너무 커서 생략했다. Dat..
1. Java Review (by 생활 코딩)
·
Java Spring
더보기 썸네일용! 이전에 학교에서 '객체지향프로그래밍', 'Java 프로그래밍 실습'을 수강했는데, Java 코딩을 마지막으로 한 지 시간이 흘러서 Java의 문법과 특징을 전체적으로 리뷰하려고 한다. ++ 보조 자료로 생활 코딩의 Java 강의를 활용할 예정이다. 1. Java를 시작할 때 Java는 객체 지향 언어로, class가 아주 중요한 언어이다. 우선 Java 코드의 실행을 위해 class Main 을 선언하고, 그 아래 public static void main(String[] args) { }로 main 함수를 만든다. 다른 언어와 main 함수 선언, 생김새가 조금 다르므로 이 특징을 잊으면 안된다. 또한, 변수 선언을 할 때, type을 명시한다. 아래 코드에서는 두 가지 선언을 보여준..