class GraphMatrix { char[] vertices; // 노드 int[][] matrix; // 인접 행렬 int idx; public GraphMatrix(int size) { this.vertices = new char[size]; this.matrix = new int[size][size]; this.idx = 0; } public boolean isFull(){ return this.vertices.length == idx; } public void addVertex(char c) { if(isFull()){ System.out.println("Graph is full"); return; } this.vertices[this.idx++] = c; } public void addEdg..
코딩테스트

조건) n{알파벳_문자열} -> 알파벳_문자열을 n번 만큼 반복 예시) 2{ac}f -> 2acacf e2{t3{b}}v -> etbbbtbbbv - 재귀 알고리즘을 통하여 문제를 풀어보았습니다. 코드를 보기 전에, 재귀 알고리즘에 대해 간단히 알아볼까요? 일차적으로 재귀 알고리즘의 논리적 구조는 반복문과 같습니다. 따라서, 재귀 알고리즘으로 풀 수 있는 문제는, 반복문으로 풀 수가 있는데요, 익숙한 반복문 대신 재귀로 문제를 풀었을 때의 장점은 무엇일까요? -> 변수 저장을 위해 스택이 필요한 상황에서 -> 스택을 직접 생성하는 방식 대신에 메소드 콜을 통한 프로그램의 스택 메모리를 사용하기 위해서입니다. 간단하게 들어도, 무언가 귀찮은 작업들을 재귀를 통해서 해결할 수 있을 것 같은 느낌이죠? - 바..

알고리즘 문제를 풀다가 헷갈리는 상황이 생겼습니다.. 링크드 리스트, 큐, 데크 등의 선형 자료구조의 이미지를 떠올릴 때.. 어디가 앞이고 어디가 뒤인 거지? (front) LIST (last) //..? 혹은 (last) LIST (front) // 어디가 front야..? 위 상황에서 보통 add()와 addLast()라는 메소드가 있으니까.. 두 메소드는 반대의 기능을 하는걸까...? add-->> (front) LIST (last) (front) LIST (last) (last) LIST (front) (last) LIST (front) (front) LIST (rear) (front) LIST (rear) 4 [1, 2, 3] deque.removeFirst() ==> 1 [2, 3] deque..