전체 글 107

[Lv_3] 표현 가능한 이진트리

🔍 아이디어✔️ 주어진 숫자를 이진수로 변환하고, 이진수를 이진트리로 표현할 경우의 최대 깊이를 구한다. ✔️ 최대 깊이를 통해 최대 노드 개수를 계산하고, 부족한 노드만큼 _!0!_ 을 붙여 완전포화이진트리로 만든다. ✔️ 중앙 인덱스 값을 체크하면서 완전포화이진트리 검증한다.import java.util.*; class Solution { // 정답 배열 static int[] ans = null; public int[] solution(long[] numbers) { ans = new int[numbers.length]; Arrays.fill(ans, 1); for (int i = 0; i < numbers.length; i++) { String binary = Long.toBinaryString(..

알고리즘 2023.10.20

[Lv_2] 양궁대회

🔍 아이디어 ✔️ 각 점수별 점수 획득 조합 계산 ✔️ 계산된 조합별 점수 차를 계산하고 디테일한 조건을 맞춰준다 - 최대 점수 차로 승리해야한다. - 점수 차가 동일하다면 낮은 점수의 과녁을 많이 맞춘 경우의 수를 반환한다. - 이길 수가 없다면 _!-1!_ 로 반환한다. import java.util.*; class Solution { static List permu = new ArrayList(); public int[] solution(int n, int[] info) { int[] answer = {}; int[] bucket = new int[11]; int[] maxArr = new int[11]; int maxGap = 0; getCombination(0, bucket); for (int[..

알고리즘 2023.10.12

[Lv_2] 행렬 테두리 회전하기

🔍 아이디어 ✔️ 시계방향으로 회전하며 배열 값을 바꿔주는 문제 ✔️ 복잡한 알고리즘 대신 직접 _!for!_ 문을 구현, 간단하게 풀 수 있었다. import java.util.*; class Solution { public int[] solution(int rows, int columns, int[][] queries) { int[] answer = new int[queries.length]; int[][] field = new int[rows][columns]; int count = 1; for (int i = 0; i < field.length; i++) { for (int j = 0; j < field[0].length; j++) { field[i][j] = count; count++; } } ..

알고리즘 2023.10.05

[Lv_2] 두 큐 합 같게 만들기

🔍 아이디어 ✔️ 반복문의 시작에서 정답요건을 검증한다. ✔️ 요건에 충족되지 않은 경우, 합이 큰 쪽에서 작은 쪽으로 자신의 배열 요소를 넘겨준다. ✔️ 한 쪽 배열의 크기가 0이 되어도 정답이 나오지 않았거나, count가 비정상적으로 커진 경우는 체크해서 해결 불가능한 케이스로 처리한다. import java.util.*; class Solution { public long solution(int[] queue1, int[] queue2) { Queue q1 = new LinkedList(); Queue q2 = new LinkedList(); long sum_q1 = 0; long sum_q2 = 0; for (int i : queue1) { sum_q1 += (long) i; q1.add((lo..

알고리즘 2023.09.18

이펙티브 자바 Effective Java 3/E

1. 들어가며이펙티브 자바는 자바 개발자라면 한 번은 들어본 서적일 것이다. 인지도에 비해 서적의 난도가 있어 읽다가 도중에 포기하거나, 접근 자체가 꺼려지는 경우도 더러 있다. 나의 경우에는 접근이 꺼려지는 경우였는데, 자바 언어에 조금은 익숙해지다보니 한 번은 완독해야겠다는 생각에 도전하게 되었다. 약 3주에 걸쳐 완독하게 되었는데 매일 시간을 정해두고 조금씩 독서하니 크게 부담스럽지는 않았다. 자바 언어를 다룰 사람이라면 반드시 이해하고 상황에 맞게 사용할 줄 알아야 할 좋은 습관들이 담긴 서적이다.2. 읽고나서대주제 내에 '아이템'이라는 각 소주제로 구성되어 있다. 주제별로 나뉘어 있어 다시 읽기에 좋겠다는 생각이 들었다. '동시성', '직렬화'와 같은 대주제들은 관련 구현을 하며 실수나 오류가 ..

생각 & 리뷰 2023.09.15

순열과 조합 알아보기

알고리즘 공부하게 되면 순열과 조합은 마주할 수 밖에 없는 개념이다. 분명 중고교 시절 배웠던 내용이지만, 막상 코드로 구현해보고자 하면 쉽지 않다.✅  순열순열은 순서가 영향있는 경우의 수 집합 개념이다. 음식을 주문하는 순서가 좋은 예시이다.예를 들어, 아메리카노와 스무디를 주문하는 경우, (아메리카노 - 스무디), (스무디 - 아메리카노)로 경우의 수는 두 가지이다.🔍 코드로 알아보기/** @Param numbers 뽑기 대상* @Param output 뽑힌 숫자들* @Param visited 뽑힌 숫자를 기록* @param depth 뽑고있는 깊이* @Param picks 뽑는 개수*/public static void perm(int[] numbers, int[] output, boolean[]..

CS 2023.09.15

자바 직렬화 알아보기

🔍  직렬화란?객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해 송수신 가능하게끔 하는 것을 의미한다. 예를 들어, 우리가 사용하는 IDE를 종료하고 새로 키더라도 편집하던 화면과 위치를 그대로 보존하고 있는데, 이것은 우리의 사용정보를 '직렬화'해 PC 어딘가에 저장해놓고 있다가 사용자가 IDE를 실행한 시점에 사용정보를 불러오기 때문이다. 사용자의 브라우저와 서버 간의 데이터를 통신할 때 자주 사용하는 JSON도 직렬화의 한 형태인 것이다. 자바는 자바 객체를 직렬화 하는 기능을 보유하고 있다. 직렬화된 파일이나 데이터는 다른 자바 기반의 시스템에서 불러와 그대로 객체로 활용할 수 있는 큰 이점이 있다.🔍  코드로 알아보기import java.io.Serializable;public..

CS 2023.09.13

[Lv_2] 두 원 사이의 정수 쌍

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181187 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public long solution(int r1, int r2) { long answer = 0; // 그래프의 양인 부분에서 조건에 일치하는 점의 개수를 구하고 거기에 4를 곱한 값이 정답 for (long i = 1; i

알고리즘 2023.08.24