본문 바로가기

분류 전체보기1102

[디자인 패턴의 아름다움] 6. 생성 디자인 패턴 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한대로 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 디자인패턴의 아름다움(왕정 저) 책 입니다.  CHAPTER 06. 생성 디자인 패턴생성 디자인 패턴은 주로 객체 생성 문제를 해결하고 복잡한 생성 프로세스를 캡슐화하며 객체의 생성 코드와 사용 코드를 분리한다.싱글턴 패턴 : 전역적으로 유일한 객체를 생성하는 데 사용팩터리 패턴 : 같은 상위 클래스나 인터페이스를 상속하는 하위 클래스와 같이 비록 유형은 다르지만 서로 관련되어 있는 객체를 주어진 객체 타입에 맞게 생성하는 데 사용빌더 패턴 : 복잡한 객체를 생성하는 데.. 2024. 5. 17.
[디자인 패턴의 아름다움] 5. 리팩터링 기법 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한대로 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 디자인패턴의 아름다움(왕정 저) 책 입니다.   CHAPTER 05. 리팩터링 기법리팩터링할 때는 코드의 나쁜 냄새와 설계 결함에 대한 통찰력을 기반으로 설계 원칙, 디자인 패턴, 코딩 규칙 등을 합리적이고 능숙하게 사용해야 하기 때문에 단순히 문제를 해결하는 것보다 코드를 리팩터링할 때 더 많은 능력이 요구된다. 5.1 리팩터링의 네 가지 요소: 목적, 대상, 시기, 방법목적리팩터링 : 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선하는 것으로, 소프.. 2024. 5. 17.
[자바] 백준 19700 - 수업 (java) 목차문제 : boj19700  필요 알고리즘그리디, 이분탐색그리디 아이디어만 있으면 난이도가 확 줄어드는 문제이다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  하나의 아이디어를 넣으면 난이도가 급하락하는 좋은 문제이다. 입력받은 h와 k를 h 기준으로 내림차순으로 정렬한다고 해보자. 그리고 h가 높은 순서대로 확인을 할껀데, 이래도 되는 이유가 '학생들의 키는 모두 다르다' 라는 조건이 있기 때문이다.   이렇게되면 난.. 2024. 5. 16.
[자바] 백준 1342 - 행운의 문자열 (java) 목차문제 : boj1342  필요 알고리즘수학 (순열 개념) 또는 브루트포스 + 백트래킹순열 개념을 사용해서 풀 수도 있고, 백트래킹을 써서 풀 수도 있다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  우선 순열 개념으로 푸는건 뒤로 미루고 브루트포스+백트래킹으로 푸는 것 부터 살펴보자.단순히 생각해보면 dfs로 모든 경우를 백트래킹하면서 찾은 후, 이미 나온 문자가 아니라면 카운팅하는 방법이 있을 것이다. 대강 O(10.. 2024. 5. 16.
[자바] 백준 24461 - 그래프의 줄기 (java) 목차문제 : boj24461  필요 알고리즘그래프 이론, 브루트 포스별다른 알고리즘 지식은 필요하지 않긴한데, 구현이 어려울 수 있다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  아래와 같은 그래프를 생각해보자.    각 정점에 대해 현재 연결된 간선의 수를 적어보면 아래와 같다. 이번에 제거될 가장자리 정점은 연결된 간선의 수가 '1'인 정점들임을 알 수 있다.    한 번 삭제된 후엔 아래와 같이 된다. 그리고 그래.. 2024. 5. 15.
[자바] 백준 11909 - 배열 탈출 (java) 목차문제 : boj11909  필요 알고리즘DP (동적 계획법)DP를 알고 있다면 쉽게 해결 가능한 문제이다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  need(X, Y)를 X 좌표에서 Y 좌표로 갈 때 필요한 비용이라고 하자. 예를들어 X가 (1,1), Y가 (1,2) 이고, 배열의 값이 각각 3과 5였다면 need(X, Y)는 3이다.   이 때 dp[a][b]는 (a, b) 좌표로 가는데 필요한 최소 비용이라고 .. 2024. 5. 14.
[자바] 백준 1484 - 다이어트 (java) 목차문제 : boj1484  필요 알고리즘수학수학 문제긴한데 딱히 수학적 지식이나 알고리즘 지식이 필요한 문제는 아니다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  내 풀이 로직은 다음과 같다. 보면 알겠지만 딱히 수학이나 알고리즘 지식이 필요한 부분은 없다. 다만 이전과의 차이가 G를 넘어서는 제곱수부터는 무시해도 된다는 직관은 필요하다. 저걸로 인해 시간복잡도가 엄청 줄어든다. 1. 제곱수들의 리스트를 만드는데, 바.. 2024. 5. 2.
[자바] 백준 31778 - PPC 만들기 (java) 목차문제 : boj31778  필요 알고리즘그리디, 투 포인터 (두 포인터), 수학 그리디 아이디어로 풀 수 있고, 내 경우 투 포인터를 사용해 구현했다. 경우의 수를 찾기 위해 약간의 수학적 지식도 필요하다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  우선 어떻게 K번 연산을 적용해야 PPC 부분문자열의 최대치가 될지부터 생각해보자. 직관적으로 찾기 어렵지 않은데, 아무튼 최대한 많은 P가 앞쪽으로 가야하고, 최대한 .. 2024. 4. 30.
[자바] 백준 28109 - 약속 장소 2 (java) 목차문제 : boj28109  필요 알고리즘문자열, 그리디규칙을 찾아 그리디로 해결 가능하다.※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.  풀이  규칙만 찾으면 로직은 생각보다 간단하다."CDD" 를 가지고 한 글자만 변경해서 사전순으로 어떻게 나타낼 수 있을지 생각해보자.순서대로 살펴보면 아래와 같다.// 첫번째 글자만 변경됨ADDBDD// 두번째 글자만 변경됨CADCBDCCD// 세번째 글자만 변경됨CCACCBCDC// 자기.. 2024. 4. 25.
[디자인 패턴의 아름다움] 4. 코딩 규칙 - 내용 정리 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한대로 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 디자인패턴의 아름다움(왕정 저) 책 입니다.  CHAPTER 04. 코딩 규칙4.1 명명과 주석명명함수의 임시 변수와 같이 사용 범위가 비교적 작은 변수의 경우, a, b, c와 같은 짧은 이름을 사용할 수 있다. 하지만 전역 변수와 같이 범위가 큰 변수의 경우 긴 이름을 사용하는 것이 좋다.한눈에 설계 의도를 파악할 수 있기 때문이다.이하의 코드에서 굳이 위의 User 클래스처럼 user 접두사를 사용할 필요는 없다. 아래의 User .. 2024. 4. 24.