// 각각의 엣지에 가중치가 있는 포화 이진 트리가 있다. // 루트에서 각 리프까지의 경로 상 가중치 합을 각각 같게 하고, // 모든 가중치들의 총합이 최소가 되도록 하는 프로그램을 작성하세요. - 포인트 1. 엣지를 트리로 보기 - 포인트 2. 후위 순회하기.. - 포인트 3. 차이를 더해주기 ==> += Math.abs(x - y); - 포인트 4. 높이로 포화이진트리 담을 배열의 길이 구하기 --> 정답 풀이 케이스에서 활용 ==> Math.pow(2, h + 1); public class MyCode { // 후위 순회 --> 트리 문제 풀때 무슨 순회인지 먼저 파악하기 ! public static void solution(int h, int[] w) { // 후위 순회.. // 엣지를 노드..
전체 글
Love what you doclass Node { char data; Node left; Node right; Node(char data, Node left, Node right) { this.data = data; this.left = left; this.right = right; } } class BinaryTree2 { Node head; BinaryTree2(char[] arr) { // 배열로 노드 구성한 후, 링크트 리스트 엮는 방식 -> 노드를 idx로 접근... Node[] nodeList = new Node[arr.length]; // 노드타입 배열 먼저 구성하기 !! for (int i = 0; i < nodeList.length; i++) { nodeList[i] = new Node(arr[i], null, n..
주어진 인덱스가 idx 일 때 ( 수정 필요..?) 부모 노드의 인덱스 : idx = (idx / 2) - 1; 왼쪽 자식 노드의 인덱스 : idx = idx * 2 + 1; 오른쪽 자식 노드의 인덱스 : idx = idx * 2 + 2; - 재귀적으로 호출하여 출력하는 구조 주의 ! - 전위 순회 : 먼저 출력 (preOrder) - 중위 순회 : 중간에 출력 (inOrder) - 후위 순회 : 마지막에 출력 (postOrder)class BinaryTree { char[] tree; BinaryTree(char[] arr) { tree = arr.clone(); } public void preOrder(int idx) { // 전위 순회 int left = idx * 2 + 1; int right =..
# 공부 포인트 1. 배열의 첫 인덱스를 1부터 세면 계산하기 편하게 n + 1로 생성하기 2. ArrayList 편하게 생성하기 -> Arrays.asList(1, 2); 3. 뱀이 자신을 밟는지 보기 위해서 Queue의 contains()로 확인 4. 방향 전환 테크닉 -> 시계방향으로 ArrayList에 넣은 후 % len 테크닉으로 확인 public class Practice5_ans { public static void main(String[] args) { // Test code int n = 6; int k = 3; int l = 3; ArrayList apples = new ArrayList(); apples.add(new ArrayList(Arrays.asList(3, 4))); app..
·생각
나는 어떤 사람인가? 나를 가장 잘 아는 사람은 나를 "차가워 보이지만 알고 보면 따뜻한 사람"이라고 한다. 음, 그런가? 떠올려보면 유년시절 '섬집아이'를 듣고 운 적이 있다. 어려서 가사도 몰랐는데 멜로디가 뭐랄까, 짠해서 눈물이 났다. 최근에도 롤드컵 뮤비를 보고 눈물이 난 적이 있다. 난 데프트가 누군지도 몰랐는데... 물론 섬집아이나 롤드컵 뮤비 때문에 눈물을 흘렸다고 따뜻한 사람이 되는 건 아니지만, 무엇인가 뜬금없거나 대중적이지 않은 독특한 감정선, 혹은 뾰족한 시선을 갖고 있는 것 같긴하다. 그러고보니 나를 가장 잘 아는 사람이 "조용해서 재미 없을 거 같은데 알고 보면 재밌는 사람"이라고도 했었다. 여기선 "알고 보면" 이라는 말에 집중하면 좋겠다. "알고 보면 어떤 사람"이라는 말을 자..

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

이번 게시물은 제가 좋아하는 유튜버(간다효)처럼 제목을 지어봤습니다. 원형큐에서 큐의 길이를 구할 때는 두가지 경우로 나눠서 생각해봐야 합니다. 1. front가 앞에, rear가 뒤에 있는 상황 2. rear가 앞에, front가 뒤에 있는 상황 소스코드로 나타내면 이렇게 볼 수 있는데요, int size; if (rear - front < 0) { size = rear - front + arr.length; } else { size = rear - front; } 공식처럼 생각하면 그렇구나, 하고 넘어갈 수 있지만 .. 머리속으로 떠올리면 또 쉽게 이해가 되지 않아서.. 직접 그려보았습니다.. rear - front가 음수일 경우는 rear가 배열의 앞쪽에, front가 배열의 뒷쪽에 위치한 상태로 ..

알고리즘 문제를 풀다가 헷갈리는 상황이 생겼습니다.. 링크드 리스트, 큐, 데크 등의 선형 자료구조의 이미지를 떠올릴 때.. 어디가 앞이고 어디가 뒤인 거지? (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..

저번 게시글에서 DB 저장 시 원하는 코드 값이 아닌 숫자값이 그대로 DB에 저장되고 있는 이슈를 확인해보았습니다.이번엔 Enum을 활용하여 개발자의 의도대로 데이터를 insert하는 방법을 알아보겠습니다. 1. 의도대로 Insert 되지 않고 있는 필드들.. - @Id, @Enumerated @Entity@Table(name = "post")@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@IdClass(PostId.class)public class Post { @Id @Enumerated(EnumType.STRING) // 왜 적용 조차 안되지.. @Column(name = "category_code") private ..
- 원형 데크 구현 예시 템플릿 // 배열을 이용한 기본 데크 직접 구현 class MyDeque { MyDeque(int size) { } public boolean isEmpty() { } public boolean isFull() { } public void addFirst(int data) { } public void addLast(int data) { } public Integer removeFirst() { } public Integer removeLast() { } public void printDeque() { } } public class Practice2 { public static void main(String[] args) { // Test code MyDeque myDeque = ..