전체 글

말보다는 실천하는 사람
1. 들어가며 이펙티브 자바는 자바 개발자라면 한 번은 들어본 서적일 것이다. 인지도에 비해 서적의 난도가 있어 읽다가 도중에 포기하거나, 접근 자체가 꺼려지는 경우도 더러 있다. 나의 경우에는 접근이 꺼려지는 경우였는데, 자바 언어에 조금은 익숙해지다보니 한 번은 완독해야겠다는 생각에 도전하게 되었다. 약 3주에 걸쳐 완독하게 되었는데 매일 시간을 정해두고 조금씩 독서하니 크게 부담스럽지는 않았다. 자바 언어를 다룰 사람이라면 반드시 이해하고 상황에 맞게 사용할 줄 알아야 할 좋은 습관들이 담긴 서적이다. 2. 읽고나서 대주제 내에 '아이템'이라는 각 소주제로 구성되어 있다. 주제별로 나뉘어 있어 다시 읽기에 좋겠다는 생각이 들었다. '동시성', '직렬화'와 같은 대주제들은 관련 구현을 하며 실수나 오..
알고리즘 공부하게 되면 순열과 조합은 마주할 수 밖에 없는 개념이다. 분명 중고교 시절 배웠던 내용이지만, 막상 코드로 구현해보고자 하면 쉽지 않다. ✅ 순열 순열은 순서가 영향있는 경우의 수 집합 개념이다. 음식을 주문하는 순서가 좋은 예시이다. 예를 들어, 아메리카노와 스무디를 주문하는 경우, (아메리카노 - 스무디), (스무디 - 아메리카노)로 경우의 수는 두 가지이다. 🔍 코드로 알아보기 /* * @Param numbers 뽑기 대상 * @Param output 뽑힌 숫자들 * @Param visited 뽑힌 숫자를 기록 * @param depth 뽑고있는 깊이 * @Param picks 뽑는 개수 */ public static void perm(int[] numbers, int[] output,..
🔍 직렬화란? 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해 송수신 가능하게끔 하는 것을 의미한다. 예를 들어, 우리가 사용하는 IDE를 종료하고 새로 키더라도 편집하던 화면과 위치를 그대로 보존하고 있는데, 이것은 우리의 사용정보를 '직렬화'해 PC 어딘가에 저장해놓고 있다가 사용자가 IDE를 실행한 시점에 사용정보를 불러오기 때문이다. 사용자의 브라우저와 서버 간의 데이터를 통신할 때 자주 사용하는 JSON도 직렬화의 한 형태인 것이다. 자바는 자바 객체를 직렬화 하는 기능을 보유하고 있다. 직렬화된 파일이나 데이터는 다른 자바 기반의 시스템에서 불러와 그대로 객체로 활용할 수 있는 큰 이점이 있다. 🔍 코드로 알아보기 import java.io.Serializable; public..
코딩테스트 연습 - 의상 | 프로그래머스 스쿨 (programmers.co.kr) import java.util.*; class Solution { private static final List caseList = new ArrayList(); public int solution(String[][] clothes) { Map map = new HashMap(); for (String[] c : clothes) { String type = c[1]; String name = c[0]; if (!map.containsKey(type)) { map.put(type, new ArrayList()); } map.get(type).add(name); } if (map.size() == 30) { return 107..
문제링크 : 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
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/154538 import java.util.*; class Solution { public int solution(int x, int y, int n) { // set으로 선언해서 같은 값들이 중복생성 되는 것 방지 -> 경우의 수 낮추기 HashSet set = new HashSet(); // 초기값 대입 set.add(x + n); set.add(x * 2); set.add(x * 3); int count = 1; // x와 y가 같은 경우는 count = 0 if (x == y) { return 0; } while (set.size() > 0) { if (set.contains(y)) ..
1. 들어가기 개발자라면 누구나 올바르게 작성된 코드를 읽으며 즐거움을 느끼거나, 엉망인 코드를 보며 한숨부터 나오는 상황을 겪어본 적이 있을 것입니다. 쉽게 작성된 코드는 무척 중요합니다. 우리는 코딩 대부분의 시간을 코드를 '작성'할때가 아닌 '분석'하는 과정에서 소비하기 때문입니다. 는 설계자가 작성한 코드가 분석되는 시간을 최소화하고 단순하고 직접적인, 의도대로 읽히는 코드를 작성할 수 있는 여러가지의 법칙을 소개합니다. 2. 구성 책은 초반, 중반, 후반 크게 세 가지의 구성으로 나뉘어집니다. 초반부에서는 클린코드 개념설명, 변수 및 함수의 작명법 등 기초적인 법칙에 대해 설명하고 있으며 중반부에서는 실제 오픈소스 코드를 리팩터링하는 과정이 서술되었습니다. 후반부에서는 소개한 클린코드를 정리하고..
링크: https://school.programmers.co.kr/learn/courses/30/lessons/81302 import java.util.*; class Solution { public int[] solution(String[][] places) { int[] answer = new int[places.length]; int count = 0; for (String[] place : places) { char[][] cp = new char[5][5]; for (int i = 0; i < 5; i++) { cp[i] = place[i].toCharArray(); } List p_pos = new ArrayList(); for (int i = 0; i < 5; i++) { for (int j..
thisisdj
codenextdoor