분류 전체보기

Gyoogle (규글)
다익스트라(Dijkstra) 알고리즘
다익스트라(Dijkstra) 알고리즘 DP를 활용한 최단 경로 탐색 알고리즘 다익스트라 알고리즘은 특정한 정점에서 다른 모든 정점으로 가는 최단 경로를 기록한다. 여기서 DP가 적용되는 이유는, 굳이 한 번 최단 거리를 구한 곳은 다시 구할 필요가 없기 때문이다. 이를 활용해 정점에서 정점까지 간선을 따라 이동할 때 최단 거리를 효율적으로 구할 수 있다. 다익스트라를 구현하기 위해 두 가지를 저장해야 한다. 해당 정점까지의 최단 거리를 저장 정점을 방문했는 지 저장 시작 정점으로부터 정점들의 최단 거리를 저장하는 배열과, 방문 여부를 저장하는 것이다. 다익스트라의 알고리즘 순서는 아래와 같다. 최단 거리 값은 무한대 값으로 초기화한다. for(int i = 1; i
[Spring Boot] Test Code
·스프링(Spring)
[Spring Boot] Test Code 테스트 코드를 작성해야 하는 이유 개발단계 초기에 문제를 발견할 수 있음 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 시 기존 기능이 잘 작동하는 지 확인 가능함 기능에 대한 불확실성 감소 개발 코드 이외에 테스트 코드를 작성하는 일은 개발 시간이 늘어날 것이라고 생각할 수 있다. 하지만 내 코드에 오류가 있는 지 검증할 때, 테스트 코드를 작성하지 않고 진행한다면 더 시간 소모가 클 것이다. 1. 코드를 작성한 뒤 프로그램을 실행하여 서버를 킨다. 2. API 프로그램(ex. Postman)으로 HTTP 요청 후 결과를 Print로 찍어서 확인한다. 3. 결과가 예상과 다르면, 다시 프로그램을 종료한 뒤 코드를 수정하고 반복한다. 위와 같은 방식이 얼마나..
[Spring Boot] SpringApplication
·스프링(Spring)
스프링 부트로 프로젝트를 실행할 때 Application 클래스를 만든다. 클래스명은 개발자가 프로젝트에 맞게 설정할 수 있지만, 큰 틀은 아래와 같다. @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @SpringBootApplication 어노테이션을 통해 스프링 Bean을 읽어와 자동으로 생성해준다. 이 어노테이션이 있는 파일 위치부터 설정들을 읽어가므로, 반드시 프로젝트의 최상단에 만들어야 한다. SpringApplication.run()으로 해당 클래스를 run하면, 내장 WAS를 실행한다...
Blocking/Non-blocking & Synchronous/Asynchronous
·CS/네트워크
Blocking/Non-blocking & Synchronous/Asynchronous 동기/비동기는 우리가 일상 생활에서 많이 들을 수 있는 말이다. Blocking과 Synchronous, 그리고 Non-blocking과 Asysnchronous를 서로 같은 개념이라고 착각하기 쉽다. 각자 어떤 의미를 가지는지 간단하게 살펴보자 homoefficio님 블로그에 나온 2대2 매트릭스로 잘 정리된 사진이다. 이 사진만 보고 모두 이해가 된다면, 차이점에 대해 잘 알고 있는 것이다. Blocking/Non-blocking 블럭/논블럭은 간단히 말해서 호출된 함수가 호출한 함수에게 제어권을 건네주는 유무의 차이라고 볼 수 있다. 함수 A, B가 있고, A 안에서 B를 호출했다고 가정해보자. 이때 호출한 함수..
[Spring] MVC Framework
·스프링(Spring)
Spring MVC Framework 스프링 MVC 프레임워크가 동작하는 원리를 이해하고 있어야 한다 클라이언트가 서버에게 url을 통해 요청할 때 일어나는 스프링 프레임워크의 동작을 그림으로 표현한 것이다. MVC 진행 과정 클라이언트가 url을 요청하면, 웹 브라우저에서 스프링으로 request가 보내진다. Dispatcher Servlet이 request를 받으면, Handler Mapping을 통해 해당 url을 담당하는 Controller를 탐색 후 찾아낸다. 찾아낸 Controller로 request를 보내주고, 보내주기 위해 필요한 Model을 구성한다. Model에서는 페이지 처리에 필요한 정보들을 Database에 접근하여 쿼리문을 통해 가져온다. 데이터를 통해 얻은 Model 정보를 C..
[Java] 직렬화(Serialization)
·Java
[Java] 직렬화(Serialization) 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달 할 수 없다. 따라서, 이런 문제를 해결하기 위해선 주소값이 아닌 Byte 형태로 직렬화된 객체 데이터를 전달해야 한다. 직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서, 전송 및 저장이 가능한 데이터로 만들어주는 것이 바로 '직렬화(Serialization)'이라고 말할 수 있다. 직렬화 조..
Jmeter를 활용한 서버 부하 테스트
·정보
Jmeter는 Apache에서 재공하는 웹사이트 성능 측정을 할 수 있는 오픈소스 라이브러리다. [다운로드 링크] Apache JMeter - Download Apache JMeter Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava jmeter.apache.org 만약 자바가 설치되어 있지 않다면, ..
[스프링 부트] windows & linux에서 파일 절대 경로 맞추기
·스프링(Spring)
로컬 pc로 스프링 부트 프로젝트를 작업하다가, aws ec2로 배포하게 되면 운영중인 rds나 데이터베이스에 대한 세부정보를 외부로부터 숨겨야한다. (비밀번호 등등) 다양한 방법이 있겠지만, 나는 내 로컬 pc와 linux의 절대 경로를 활용했다. 나는 rds와 mariadb 정보가 담겨있는 yml 파일을 따로 로컬과 linux app 폴더에 저장한 뒤, 스프링 부트의 application.java에서 조건문으로 나눠줬다. 자바에서는 'os.name'에 대한 프로퍼티를 시스템에서 얻으면 내가 어떤 운영체제를 활용하고 있는지 값을 받아올 수 있다. String os = System.getProperty("os.name").toLowerCase(); 만약 로컬(윈도우)라면 os에는 "win"이 저장된다. ..
[Git] default 브랜치는 master에서 main으로 변경되었음
·정보
현재 많은 Git 명령어 정보들이 'master' 브랜치를 이용하고 있다. 하지만 최근 프로젝트 생성 시 기본 브랜치가 'main'으로 변경되면서 혼동되는 경우들이 존재한다. "There isn't anything to compare. Nothing to compare, branches are entirely different commit histories" master로 push를 하면 커밋 결과가 제대로 적용되지 않고, main 브랜치와 Compare하는 창이 나온다. 기본 default 브랜치가 main이기 때문에, master로 push를 해도 아직 적용 단계가 안되었기 때문이다. 현재 많은 튜토리얼 들이 master 브랜치가 default인 기준으로 작성되어서 제대로 push가 되지 않는 상황이..
Spring Boot 동작 환경
·스프링(Spring)
1. 웹 브라우저에서 url(localhost:8080/hello)을 보낸다. 2. url을 받은 내장 톰켓 서버는 맵핑되는 컨트롤러에게 넘겨준다 (→ helloController) 3. 맵핑된 컨트롤러에서 model에 데이터를 담아 return해준다. 4. 컨트롤러가 return으로 반환해주는 model을 viewResolver가 템플릿을 찾아서 뿌려준다. 5. 변환된 html을 다시 웹 브라우저에게 제공해준다. 출처 : 링크 [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확..
[Algorithm] 카페 주문처리 시스템
·Algorithm
손님이 주문한 음료를 우선순위에 맞춰서 저장하여 처리하는 문제 (보안상 링크 및 자세한 설명 생략) 커피 종류는 최대 50개, 서로 다른 난이도를 가짐 하루에 최대 10,000명 손님이 한 명당 최대 10개 주문 가능 (커피 종류 중복 가능) 손님 번호는 1 ~ 100,000 커피 별로 주문 처리 시 우선순위 : 손님 주문 中 가장 높은 난이도 + 주문시각 오름차순 (같으면 주문 시각 오름차순) 주문 최대 호출 1만, 커피 만듬 호출 10만, 취소 호출 1만, 수량 체크 1만 함수 void init( ... ) : 음료 난이도 초기화 void order( ... ) : 손님이 주문한 음료 전송 (시간 포함) int supply(int kind) : kind 음료에서 가장 우선순위 높은 것 제조 (해당 손..
[Git] Logon failed, use ctrl+c to cancel basic credential prompt
·정보
git으로 push를 할 때 다음과 같은 문구가 뜨면서 로그인을 하라고 창이 뜬다. 어떤 문제인지 찾아보니, Git의 최신 업데이트가 있어서 발생한 이슈였다. bash 창에 `git update-git-for-windows`를 입력하고, 새로운 버전으로 업데이트를 시키면 해결이 가능하다.
[VSCODE PowerShell] Execution_Policies 문제 해결
·정보
쉘 스크립트에서 정책문제로 명령어 실행이 안되는 경우가 있다. 이 시스템에서 스크립트를 실행할 수 없으므로 ... 스크립트 실행 권한이 제한되어 있기 때문에 발생하는 문제다. 해결 Windows PowerShell을 관리자 모드로 실행 get-help Set-ExecutionPolicy 입력 ExecutionPolicy에 대한 정책을 RemoteSigned로 수정해줘야 한다. Set-ExecutionPolicy RemoteSigned 이제 정상적으로 설치가 진행된다.
삼성 소프트웨어 역량테스트 PRO등급 준비
·Algorithm
SAMSUNG Software PRO등급 준비 역량 테스트 단계 Advanced Professional Expert 시험 시간 및 문제 수 : 4시간 1문제 Professional 단계부터는 라이브러리를 사용할 수 없다. C/Cpp 경우, 동적할당 라이브러리인 malloc.h까지만 허용 또한 전체적인 로직은 구현이 되어있는 상태이며, 사용자가 필수적으로 구현해야 할 메소드 부분이 빈칸으로 제공된다. (main.cpp와 user.cpp가 주어지며, 우리는 user.cpp를 구현하면 된다) 크게 두 가지 유형으로 출제되고 있다. 실행 시간을 최대한 감소시켜 문제를 해결하라 쿼리 함수를 최소한 실행시켜 문제를 해결하라 결국, 최대한 효율적인 코드를 작성하여 시간, 메모리를 절약하는 것이 Professinal ..
신입 개발자를 위한 웹사이트를 만들었습니다.
·정보
취업 준비를 하면서 정리했던 컴퓨터 공학 '전공 지식'과 '기술 면접'에 관련된 학습 내용들을 편하게 볼 수 있도록 웹사이트로 만들었습니다. 기존의 Github Repository에서 md파일로 정리해오던 자료들을, Vuepress 테마를 활용하여 GitHub 블로그로 만들고 개인 커스텀 도메인을 연결 완료했습니다. 게시글을 하나하나 작성하지 않고도, 바로 docs 폴더 안에 md파일을 넣어두면 게시글에 markdown 형식이 적용되어 나오기 때문에 UI적으로도 깔끔한 구성이 나와 vuepress를 선택하게 되었습니다. 티스토리와 같이 Gyoogle이라는 이름으로 정했으며, 개발자들이 많이 이용하는 dev로 도메인을 구매했습니다. [링크] Gyoogle gyoogle.dev 개발자의 길을 꿈꾸거나, 취업..
[알고리즘] 비트마스크(BitMask)
비트마스크(BitMask) - 집합의 요소들의 구성 여부를 표현할 때 유용한 테크닉 왜 비트마스크를 사용하는가? - DP나 순열 등, 배열 활용만으로 해결할 수 없는 문제 - 작은 메모리와 빠른 수행시간으로 해결이 가능 (But, 원소의 수가 많지 않아야 함) - 집합을 배열의 인덱스로 표현할 수 있음 - 코드가 간결해짐 비트(Bit)란? 컴퓨터에서 사용되는 데이터의 최소 단위 (0과 1) 2진법을 생각하면 편하다. 우리가 흔히 사용하는 10진수를 2진수로 바꾸면? 9(10진수) → 1001(2진수) 비트마스킹 활용해보기 - 0과 1로, flag 활용하기 [1, 2, 3, 4 ,5] 라는 집합이 있다고 가정해보자. 여기서 임의로 몇 개를 골라 뽑아서 확인을 해야하는 상황이 주어졌다. (즉, 부분집합을 의..
[알고리즘] 퀵소트(QuickSort) 구현 (C)
수, 문자열 등 정렬이 필요한 상황에 퀵소트를 라이브러리 없이 구현하기 위함 정렬 조건 자체가 많더라도, while문 안에서 모두 해결이 가능하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #include int arr[] = { 1, 10, 6, 9, 8, 2 }; void quickSort(int *, int start, int end); int main(void) { int size = sizeof(arr) / 4; printf("Before : "); for (i..
[백준 1012] 유기농 배추 (C, DFS)
문제 링크 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. ( www.acmicpc.net 전형적인 DFS, BFS 기본 문제. C로 리마인드할겸.. 가로, 세로 입력은 순서 헷갈리지 않게 항상 주의하자~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17..
[백준 4963] 섬의 개수 (C)
문제 링크 4963번: 섬의 개수 문제 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오. 한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다. 두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러쌓여 있으며, 지도 밖으로 나갈 수 없다. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 www.acmicpc.net C언어로 연습할 겸 푼 문제. 새롭다 다시 익혀야겠다;; 소스 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2..
[프로그래머스] 베스트앨범 (Java)
·Algorithm
문제 출처 : 링크 코딩테스트 연습 - 베스트앨범 | 프로그래머스 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 play programmers.co.kr 장르와 노래는 해시 테이블을 직접 구현해 관리하고, 베스트앨범에 넣을 인덱스는 퀵소트를 만들어 뽑아냈다. 라이브러리 안쓰고 푸는 연습에 매우매우 좋은 문제..
[백준 1197] 최소 스패닝 트리 (Java)
MST를 통해 풀어야 하는 문제다. MST에는 크루스칼과 프림 두가지 방법이 있다. dense가 많을 때는 프림이 더 효율적이다. 10만개의 간선이 들어오므로 프림으로 풀었다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer..
[Pandas] 데이터 분석 (Google Colab 활용)
·파이썬(Python)
[Pandas] 데이터 분석 DataFrame을 만들어 다루기 위한 설치 >>> pip install pandas >>> pip install numpy >>> pip install matplotlib pandas : DataFrame을 다루기 위해 사용 numpy : 벡터형 데이터와 행렬을 다룸 matplotlib : 데이터 시각화 데이터 분석 스칼라 : 하나의 값을 가진 변수 → a = 'hello' 벡터 : 여러 값을 가진 변수 → b = ['hello', 'world'] 데이터 분석은 주로 '벡터'를 다루고, DataFrame의 변수도 벡터 이런 '벡터'를 pandas에서는 Series라고 부르고, numpy에서는 ndarray라 부름 파이썬에서 제공하는 벡터 다루는 함수들 >>> all([1, ..
[알고리즘] LCA(Lowest Common Ancestor)
[알고리즘] LCA(Lowest Common Ancestor) 최소 공통 조상을 찾는 알고리즘 → 두 정점이 만나는 최초 부모 정점을 찾는 것! 트리 형식이 아래와 같이 주어졌다고 하자 4와 5의 LCA는? → 4와 5의 첫 부모 정점은 '2' 4와 6의 LCA는? → 첫 부모 정점은 root인 '1' 어떻게 찾죠? 해당 정점의 depth와 parent를 저장해두는 방식이다. 현재 그림에서의 depth는 아래와 같을 것이다. [depth : 정점] 0 → 1(root 정점) 1 → 2, 3 2 → 4, 5, 6, 7 parent는 정점마다 가지는 부모 정점을 저장해둔다. 위의 예시에서 저장된 parent 배열은 아래와 같다. // 1 ~ 7번 정점 (root는 부모가 없기 때문에 0) int parent..
[CodeForce Beta Round #4] C. Registration system
문제 출처 : 링크 Problem - C - Codeforces codeforces.com 문제 자체는 어렵지 않다. 처음으로 등록되는 문자열은 "OK"로 출력하고, 만약 똑같은 문자열이 또 입력되면 숫자를 붙여서 출력해야한다. ex) Input 4 abacaba acaba abacaba acab output OK OK abacaba1 OK abacaba가 3번째에 또 들어오면서 abacaba1로 출력하는 모습을 볼 수 있다. 만약 한번더 들어오면 abacaba2를 출력하면 된다. 이 문제는 시간초과에 빠지기 쉬운 문제다. 왜냐하면 N의 값이 1~100000이다. 만약 브루트포스로 진행하면 N^2으로 100억번의 연산을 해야하는데 문제에 주어진 제한 시간 5초로는 불가능하다. 이 문제는 따라서 해시 테이..
[CodeForce Beta Round #4] B. Before an Exam
문제 출처 : 링크 Input으로 요일 수(d)와 최대 시간(sumTime)이 주어진다. 그리고 d만큼 하루에 공부할 수 있는 최소 시간과 최대 시간이 각각 한 줄씩 들어온다. 모든 요일에 주어진 최소 시간만큼은 공부를 해야 하고, 최대 시간과 일치하는 공부 시간을 출력해야 한다. 주어진 요일의 공부시간동안 최대 시간만큼 할 수 없으면 "NO"를 출력하고, 가능하면 "YES"와 함께 요일별 공부시간을 출력해야 한다. 예) 2 5 0 1 3 5 d = 2고, sumTime = 5다. 이틀동안 5시간의 공부를 해야한다. 첫째날은 0~1시간 공부를 할 수 있고, 둘째날은 3~5시간을 공부할 수 있다. 첫째날에 1시간 공부 & 둘째날에 4시간 공부 or 첫째날 0시간 공부 & 둘째날에 5시간 공부 두가지 경우로..
[CodeForce Beta Round #4] A. Watermelon
문제 출처 : 링크 아주 간단한 문제다. input 값이 들어오면, 2명이서 나눠가질 때 둘다 짝수 값으로 가질 수 있으면 'YES' 아니면 'NO'를 출력해야한다. 예를 들면 2는 1과 1로 밖에 못나눠서 NO 6은 2와 4로 나누면 짝수라 YES 7은 짝수로 나눌 수 없어서 NO N이 1~100 사이에 수가 들어오므로, 1이 아닌 경우에 둘로 나눈 값이 모두 짝수로 나오는 경우가 있는지 판단하면 된다. 나는 N이 들어오면, for문에서 N을 2로 나누고 1씩 감소하며 두 수가 짝수인지 체크하는 방식으로 해결했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 package CodeForces; impor..
[알고리즘] 간단하지만 알면 좋은 최적화들
·정보
알고리즘 문제를 풀면서 최적화에 신경을 써야할 때가 있다. (시간이나 메모리를 줄이는 것이 중요한 B형처럼..) 1. for문의 ++i와 i++ 차이 for(int i = 0; i < 1000; i++) { ... } for(int i = 0; i < 1000; ++i) { ... } 내부 operator 로직을 보면 i++은 한번더 연산을 거친다. 따라서 ++i가 미세하게 조금더 빠르다. 하지만 요즘 컴파일러는 거의 차이가 없어지게 되었다고 한다. 2. if/else if vs switch case '20개의 가지 수, 10억번의 연산이 진행되면?' if/else 활용 : 약 20초 switch case : 약 15초 switch case가 더 빠르다. (경우를 찾아서 접근하기 때문에 더 빠르다) if..
[Spring Boot & React] Polling 웹애플리케이션 만들기 - 2부
[Spring Boot & React] Polling 웹애플리케이션 만들기 - 2부 1부 : 프로젝트 생성 및 기본 도메인 모델과 레포지토리 생성 최종적으로 만들어지는 페이지는 아래와 같다. 지난 시간에 이어서, 이번에는 JWT 인증과 함께 Spring Security 구성 및 로그인과 회원가입에 대한 API를 만들어보도록 하겠다. 처음 접하면 상당히 내용이 어렵고 복잡해보인다. 일단 진행과정을 익히며 익숙해지도록 노력해보자! Spring Security와 JWT를 통한 사용자 인증 구축하기 사용자가 웹 애플리케이션에 회원가입하고, 로그인할 수 있는 API를 만들 것이다. 우선 진행하기에 앞서, 어떤 식으로 인증과정을 설계할건지 요약해보자 - 새로운 사용자를 Full Name, UserName, Emai..
[Spring Boot & React] Polling 웹애플리케이션 만들기 - 1부
[Spring Boot & React] Polling 웹애플리케이션 만들기 - 1부 Spring Boot와 React를 연동하여 Polling 웹앱을 만들어보려고 한다. CalliCoder에서 진행하는 Tutorial을 참고해서 다시 재구성해봤다. (링크) 최종적으로 만들어지는 페이지는 아래와 같다. [구성] Back-End - Spring Boot (Spring Security와 JWT 인증을 활용한 백엔드 서버 구축) - Database는 MySQL 활용 (JPA) Front-End - React 스프링 부트 프로젝트 생성하기 http://start.spring.io/에 접속해서 프로젝트를 생성해보자 자신의 프로젝트에 맞게 설정해주면 된다. 기본적으로 Dependencies는 Web, JPA, MyS..
[알고리즘] 그래프(Graph)에서 사이클(Cycle) 찾기
[알고리즘] 그래프(Graph)에서 사이클(Cycle) 찾기 사이클을 찾기 위해서는 DFS를 활용한다. (정점 : v, 간선 : e) - visited[] : 점들의 방문여부가 저장된 배열 - recur[] : v가 지금까지 방문한 점이 저장된 배열 for(v 수 만큼) { dfs(v, visited, recur) } DFS 수도코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 boolean dfs(v(a), visited, recur) { visited[v(a)] = true recur[v(a)] = true for(v(a)와 연결된 점의 수만큼) { b = 연결된 점 if(!visited[b] && dfs(v(b), visited, recur){ // b가 방문상태..
Gyoogle
'분류 전체보기' 카테고리의 글 목록 (3 Page)