본문 바로가기

전체 글1104

[객사오 정리] 1장. 협력하는 객체들의 공동체 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것 혹은 다른 책이나 자료의 내용으로, 객사오 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 객체지향의 사실과 오해(조영호 저) 책 입니다. 서문☆ 4page에 나오는 상속과 일반화 : 상속엔 서브클래싱과 서브타이핑이 있다. 서브클래싱은 단순히 코드를 재사용하기 위해 상속을 사용한 경우인데 이 경우엔 일반화와 관련이 없다. 서브타이핑은 다형적인 협력 위해 상속을 사용하는 경우이다. 이 경우 부모 클래스는 자식 클래스의 일반화이다(반대는 특수화). 1. 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니다. 고객과 사용자.. 2023. 4. 26.
[자바] 백준 27961 - 고양이는 많을수록 좋다 (java) 목차 문제 : boj27961 필요 알고리즘 그리디 0마리 이상 k마리 이하에 안낚이도록 그리디 규칙을 정할 수 있어야 한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 주의해야하는 점은 복제 마법 부분이다. 0마리 이상 k마리 이하라고 했는데, k마리 복제하지 않는게 이득인 경우가 과연 있을까? 없다(갯수 안넘어가게 조절할 때 빼고). 즉 이 문제는 고양이를 1마리 늘리거나, 2배 늘릴 수 있을 때 최소의 행동을 구하는.. 2023. 4. 19.
[자바] 백준 27960 - 사격 내기 (java) 목차 문제 : boj27960 필요 알고리즘 수학, 2진수 2진수를 떠올렸다면 풀만한 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 과녁의 점수가 2진수의 각 자리수를 뜻하는걸 깨달았다면, 정수 표현방식과 동일하다는걸 떠올릴 수 있다. 즉, Sa, Sb 각각에 대해 어떤 과녁을 맞췄는지 항상 분리해낼 수 있다. 예를들어 7이라는 점수를 표현하려면 뭔가 과녁을 어떻게 조합하면 다양한 경우의 수가 있다고 생각할 수 있.. 2023. 4. 19.
[자바] 백준 27959 - 초코바 (java) 목차 문제 : boj27959 필요 알고리즘 사칙연산 간단한 곱셈, 비교 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 100N이 M 미만이라면 No, 이상이라면 Yes를 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Mai.. 2023. 4. 19.
[자바] 백준 16099 - Larger Sport Facility (java) 목차 문제 : boj16099 필요 알고리즘 사칙연산 간단한 사칙연산 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 l_t, w_t, l_e, w_e 를 입력받은 후 l_t * w_t와 l_e * w_e를 비교한다. 같다면 Tie, 전자가 크다면 TelecomParisTech, 후자가 크다면 Eurecom를 출력해주면 된다. 다만 곱셈의 결과가 int로는 표현 불가능한 범위이므로 long을 사용해야 한다는 점은 주.. 2023. 4. 19.
읽은 책 소감 - 이펙티브 자바 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.