본문 바로가기

전체 글1099

읽은 책 소감 - 이펙티브 자바 3/E 아직 모르는게 많은 입장에서, 확실히 이건 해라! 이건 하지마라! 이렇게 단호하게 말해주는 책이 좋은 것 같다. "이러이러한 방법이 좋긴한데, 서로 장단점이 있어요.. 이거 써도 되고 저거 써도 되긴해요" 이런식으로 써있는 책은 사실 어느정도 지식 있는 사람이라면 판단의 폭을 넓혀주겠지만 초보자들이 읽기엔 별로인 것 같다. 그런 면에서 이 책은 각 아이템의 제목부터가 단언적이다. "로 타입은 사용하지 말라", "다 쓴 객체 참조를 해제하라", "int 상수 대신 열거 타입을 사용하라", ... 그래서 초보자용으로 참 좋은데, 문제는 책이 좀 어렵긴하다. 적어도 자바의 기본적인 문법은 알고 봐야 읽힌다. 다소 깊은 지식까지 써 있는 편이긴한데, 사실 제목이랑 기본 개념만 봐도 충분히 도움된다. 개인적으로 .. 2023. 4. 17.
[Study 007] 이펙티브 자바 스터디 주제 이펙티브 자바. 각 주차별로 읽어와서 질문, 토론, 추가로 하고 싶은 얘기 진행 참가자 8명 일정 (완료) 1주차 (2023-02-13) : 1장, 2장 2주차 (2023-02-20) : 3장 3주차 (2023-02-27) : 4장 4주차 (2023-03-13) : 5장 5주차 (2023-03-27) : 6장 6주차 (2023-04-03) : 7장, 8장 7주차 (2023-04-10) : 9장, 10장 8주차 (2023-04-17) : 11장, 12장 스터디 내용 정리 [이펙티브 자바 정리] 2장 - 객체 생성과 파괴 (추가로 정리글은 작성하지 않을 예정입니다. 중간중간 모르는 내용이고 유용한게 보이면 개별적으로 작성할 것 같습니다.) 2023. 4. 17.
[종만북] MATCHORDER - 출전 순서 정하기 (자바 java) 알고리즘 문제해결전략(종만북) 스터디 메인 페이지 목차 문제 : aoj-MATCHORDER 풀이 생각해야 할 조건은 두 가지이다. 1. 러시아와 한국 팀이 1:1로 매칭이 되긴 해야 한다. 2. 러시아팀의 레이팅 이상이기만 하다면 그 차이는 무시할 수 있다. 위 두가지를 생각하면서 최대한으로 이기려고 한다면, 각 러시아팀 레이팅에 대해 최대한 차이가 적은 그 이상의 한국팀 레이팅을 매칭시켜주면 된다. 또한 1:1로 매칭되긴 해야하므로, 현재 러시아팀 레이팅 이상의 값이 남는게 없다면 남은 한국팀 레이팅 중 가장 낮은 값을 매칭해준다. 현재 러시아의 레이팅 이상이면서 가장 작은 값은 이분 탐색으로 찾도록 구현했다. 코드 : github import java.io.BufferedReader; import j.. 2023. 4. 17.
[자바] 백준 25206 - 너의 평점은 (java) 목차 문제 : boj25206 필요 알고리즘 구현, 문자열 문자열을 잘 파싱해서 문제에서 제시된대로 구현해주는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 구현 로직은 다음과 같다. 1. 20줄 각각을 받으면서 첫 번째 문자는 필요없으니 버리고, 세 번째 입력값이 'P' 라면 다음 줄로 넘어간다. 2. 2번째 값을 double로 받은걸 grade, 3번째는 double로 과목평점을 변환해서 받은걸 rating 이.. 2023. 4. 15.
[종만북] STRJOIN - 문자열 합치기 (자바 java) 알고리즘 문제해결전략(종만북) 스터디 메인 페이지 목차 문제 : aoj-STRJOIN 풀이 N개의 문자열이 주어질 때, 여기서 2개를 선택해 새로운 문자열을 만들고, 그 길이의 합이 비용이 된다. 이걸 하나의 문자열만 남을 때 까지 반복하는 문제이다. 합치는 순서가 중요할텐데, 4개의 문자열이 있고 각 길이가 A, B, C, D라고 해보자. (A)와 (B)를 합치면 (A+B)의 문자열이 된다. 그럼 문자열은 현재 (A+B), (C), (D)가 있다. (A+B)와 (C)를 합치면 (A+B+C)가 된다. 그리고 다시 (D)와 합치면 (A+B+C+D)가 된다. 여기서 비용에 들어간 횟수를 살펴보면 'A'와 'B'는 비용에 총 3번, 'C'는 2번, 'D'는 1번 더해졌다. 따라서 직관적으로 여러번 합쳐질 녀석.. 2023. 4. 14.
[종만북] LUNCHBOX - Microwaving Lunch Boxes (자바 java) 알고리즘 문제해결전략(종만북) 스터디 메인 페이지 목차 문제 : aoj-LUNCHBOX 풀이 N개의 Lunch Box가 있고, 각각 전자렌지에 돌리는 시간 M과 먹는시간 E를 가지는 상황이다. 여기서 고정인 부분은 전자렌지 돌리는 시간 M는 무조건 N개의 M을 전부 더한 시간만큼이 필요하다. 반면에 먹는시간 E는 각 M이 끝날때마다 시작된다. 예를들어 아래와 같은 입력을 보자. 1 3 1 3 2 10 4 1 순서대로 진행해본다면 아래와 같이 진행된다. 사실 저 순서대로 처리하는게 풀이인데, 결국 M의 총합은 항상 고정이고, E가 시작하는건 각 M이 끝난 이후이므로 E가 긴 녀석을 최대한 빨리 먹기 시작해서 처리하는게 무조건 이득이다. 따라서 E값 내림차순으로 정렬한 후 (E가 동일할 시 M을 내림차순으로.. 2023. 4. 14.
[자바] 백준 15025 - Judging Moose (java) 목차 문제 : boj15025 필요 알고리즘 구현 문제에서 제시된 대로 구현해주면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 해석만 잘하면 제시된 대로 풀면 된다. 로직을 정리하면 다음과 같다. 1. L과 R을 입력받는다. 2. L과 R이 둘 다 0이면 "Not a moose" 3. L과 R 중 큰 값을 B라고 해보자. 4. L == R 이라면 "Even [B*2]"를 출력한다. 5. 그렇지 않다면 "Odd [B*.. 2023. 4. 14.
[자바] 백준 3359 - 사각 사각 (java) 목차 문제 : boj3359 필요 알고리즘 동적 계획법(DP) 사각형을 순서대로 보면서, 점화식을 만들어 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 완전 탐색으로 한번 생각해보자. 각 사각형은 a변이 위로 올라오게 놓거나, b변이 위로 올라오게 놓을 수 있으므로 O(2^n) 으로 구할 수 있다. 이 때 n이 최대 1000 이므로 완전 탐색으론 풀 수 없음을 알 수 있다. 그렇다면 우선 생각해볼.. 2023. 4. 13.
[자바] 백준 18352 - 특정 거리의 도시 찾기 (java) 목차 문제 : boj18352 필요 알고리즘 너비 우선 탐색(BFS) 일반적인 BFS 탐색에서, 최단 거리에 목적지를 도착하는게 아니고 특정 거리인 지점을 찾는다는점만 다르다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 BFS를 잘 모른다면 'BFS 알고리즘 (너비 우선 탐색)' 글을 참고해보자. 일반적인 BFS 알고리즘으로 구현해주면 되는데, 목적지까지의 최단 거리를 구하는게 아니라 특정 거리인 위치를 찾는다는 점이 다.. 2023. 4. 12.
[자바] 백준 16200 - 해커톤 (java) 목차 문제 : boj16200 필요 알고리즘 그리디, 정렬 그리디 규칙을 잘 생각해보면 의외로 쉽게 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 결국 팀을 어떻게 정하는게 항상 최선의 선택일지 규칙을 정해야 한다. 얼핏 X값이 큰 학생들부터 골라서 선택해야 각 팀의 인원이 많아지므로 팀의 수가 줄어든다고 생각할 수 있는데, 어차피 X값은 고정된 것이고 바뀔 수 없으며, 모든 학생은 하나의 팀에 소속이 되어야만.. 2023. 4. 11.