본문 바로가기

Java62

[Design Patterns] 상태 패턴 🙋 들어가기 앞서 디자인 패턴 중에서 행동 패턴에 속해있는 "상태 패턴"에 대해서 알아보는 시간을 가져보겠습니다. 이 글에서는 상태 패턴의 구조를 예시로 알아보고 장단점과 비슷한 다른 패턴을 비교해 보겠습니다. 🫨 상태 패턴 상태 패턴은 객체 내부의 상태가 변경될 때마다 행동이 달라지는 디자인 패턴입니다. 상태에 맞는 행동을 분리해 코드의 응집도를 높이고 새로운 행동이 추가되어도 다른 행동에 영향을 주지 않는 것이 목적입니다. 🚑 구조 다음 그림과 같은 구조를 가지고 있습니다. 객체(Context)의 상태를 분리하고 상태 객체의 참조를 가지게 합니다. 이후 상태에 맞는 행위를 구현한 구현체를 만들어 줍니다. 🧙‍♂️ 예시 (feat. 주문) 배달 주문을 하는 것으로 예시를 들어보겠습니다! 간단하게 어떤 .. 2023. 6. 13.
[Java] 빌드툴 (feat. Gradle) 🐘 Gradle 이미 우리는 Gradle을 잘 사용하고 있습니다! 하지만 정확하게 어떤 도구인지 알아보는 시간을 가져보겠습니다. 😋😋 자바를 통해서 코드를 작성한 뒤 실행하기 위해선 다음과 같은 과정을 거쳐야 합니다. 작성한 코드(*.java)를 javac 명령어로 바이트 코드로 변환한다. 변환된 코드(*.class)를 java 명령어로 실행시킨다. 매번 저런 과정들을 거치는 게 귀찮기 때문에 자동으로 빌드해 주고 실행시켜 주는 도구들이 출시되었습니다. Maven, Gradle 등이 출시되었고 요즘에는 Gradle이라는 도구를 가장 많이 사용합니다😎 🙋 설치하기 설치하는 방법은 어렵지 않지만 꼭 JDK 1.8 이상 버전이 미리 설치되어 있어야 합니다. java -version 명령어로 확인부터 합시다!.. 2023. 6. 5.
[Java] 백준 17265번 : 나의 인생에는 수학과 함께 https://www.acmicpc.net/problem/17265 17265번: 나의 인생에는 수학과 함께 세현이의 인생의 목표는 1분 1초 모든 순간 수학과 함께 살아가는 것이다. 그렇기 때문에 매일 수학을 생각하면서 살아가고 있다. 세현이는 밥을 먹을 때도 쌀알의 수를 계산하여 칼로리를 바로 www.acmicpc.net 💡 문제 풀이 그래프 탐색 문제이다. 범위가 작아서 백트래킹으로 구현했다. 전역적으로 연산자에 대해서 관리했다. 따라서, 연산자일 때 새롭게 연산자를 초기화해 주고, 연산자가 아니라면 기존의 연산자로 돌려주는 것이 핵심이다. ✔️ 느낀 점 자바로 푸니까 확실히 어렵지만 할만한 문제였다. 사실 int 형으로 변환할 때 parseInt를 쓰고 싶지 않아서 char형으로 갔는데 타입은 편.. 2023. 5. 17.
[알고리즘] 재귀 & 그리디 알고리즘 🎯 목표 재귀 알고리즘의 구조를 이해한다. 그리디 알고리즘을 이해하고 자주 나오는 유형을 익힌다. 🔄️ 재귀 알고리즘 자기 자신을 다시 호출하는 구조를 가진 알고리즘이다. 보통 더 작은 구조를 다시 호출해서 해결한다. 이는 분할-정보 알고리즘과 유사하다. public void recursion(int n) { if (n == MIN_SIZE) { // 가장 작은 단위의 일을 한다. } // 가장 작은 단위가 될 때까지 쪼갠다. return recursion(n - 1); } ✌ 특징 코드가 이뻐보일 순 있다. 하지만 스택 오버플로우가 발생할 수 있고 정확한 호출 회수를 예측하기 어렵다. 따라서, 재귀로 풀 수 있는 문제는 다른 방법으로 먼저 접근해본다. 그래도 재귀로 풀겠다면, 가장 작은 단위의 일에 대.. 2023. 5. 3.
[Java] 백준 1374번 : 강의실 https://www.acmicpc.net/problem/1374 1374번: 강의실 첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 www.acmicpc.net 💡 문제 풀이 강의실 배정 문제이다. 이 문제는 최선의 강의실 개수를 구하는 문제이다. 가장 빨리 끝나는 강의 혹은 가장 빨리 시작하는 강의를 기준으로 탐색해서 해결할 수 있다. 이번 문제에선 가장 빨리 시작하는 강의를 기준으로 해결했다. 대기 중인 강의가 우선순위 큐에 저장되고 강의의 개수만큼 탐색한다. 지금 하는 강의가 끝나고 대기 중인 다음 강의가 진행될 수 있다면 다음 강의를.. 2023. 5. 3.
[Java] 백준 24460번 : 특별상이라도 받고 싶어 https://www.acmicpc.net/problem/24460 24460번: 특별상이라도 받고 싶어 첫 번째 줄에는 정수 $N$이 주어진다. (단, $N = 2^m$, $0 \le m \le 10$, $m$은 정수) 두 번째 줄부터 $N$개 줄의 $i$번째 줄에는 $i$번째 줄에 있는 의자에 적힌 추첨번호가 주어진다. 각 줄에는 $N$개의 추첨 www.acmicpc.net 💡 문제 풀이 분할 정복과 재귀가 합쳐진 문제이다. 주어진 영역을 4개의 구역으로 나눠서 가장 작은 구역이 되었을 때 그 값을 리턴하도록 한다. ✔️ 느낀 점 재귀의 핵심은 역시 가장 작은 단위가 되었을 때 어떤 값을 리턴하도록 하는 것인가? 인 것 같다. 어렵지는 않았지만 자바 코드로 작성하는 게 매우 어색한 문제였다. 💻 코드.. 2023. 5. 2.