분류 전체보기

    Head First: Design Patterns - 팩토리 메소드 패턴(Factory Method Pattern)

    디자인 패턴: 팩토리 메소드 패턴(Factory Method Pattern) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. 이전 포스팅 간단한 팩토리와 연결되는 내용입니다. Factory Method Pattern 이란? 팩토리 메소드 패턴(Factory Method Pattern)에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에 맡긴다는 것이다. Creator에는 제품을 가지고 원하는 일을 하기 위한 모든 메소드들이 구현되어 있다. 하지만, 제품을 만들어 주는 팩토리 메소드는 추상 메소드로 정의되어 ..

    [Java] 프로그래머스 (하노이의 탑) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/12946 코딩테스트 연습 - 하노이의 탑 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대 programmers.co.kr Approach 많이 알려져 있는 재귀문제, 하노이의 탑 오리지널 문제와 크게 다르지 않은 문제이다. 하노이의 탑의 주요 알고리즘은 다음과 같다. n개의 원판을 1에서 3으로 옮길 때, 출발지(1)에 있는 n - 1개 원판을 경유지(2)로 옮긴다. 출발지(1)에 있는 1개 원판을 도착지(3)로 옮긴다. -> 여기서는 정답..

    [Java] 프로그래머스 (최고의 집합) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/12938 코딩테스트 연습 - 최고의 집합 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 집합으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족 programmers.co.kr Approach 약간 Greedy한 성격의 문제였다. 일단, 합이 s인 n개의 숫자 곱이 크려면 n개의 숫자가 s / n 과 가까운 숫자여야 한다. s 를 n으로 나눈 나머지를 rest, 몫을 value 라고 할 때, 곱했을 때 최대가 되려면 rest개 만큼 value + 1인 숫자가 존재하고, 나머지 개수를 value가..

    [Java] 백준 1107 (리모컨) Gold 5

    Problem : https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net Approach BruteForce 문제이다. 우선 0부터 목표 채널 * 2 까지 만들 수 있는 숫자인지를 판단하고, 만들 수 있는 숫자라면, 숫자를 만들 때의 클릭 수와 만든 숫자와 목표 채널과의 차이(+-클릭 수)를 더한 것들 중 최솟값을 찾으면 된다. 주의할 점은, 시작 채널이 100이기 때문에 최소 100까지는 숫자를 만들 수 있는지 판단해야 한다. isP..

    [Java] 프로그래머스 (줄 서는 방법) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/12936 코딩테스트 연습 - 줄 서는 방법 n명의 사람이 일렬로 줄을 서고 있습니다. n명의 사람들에게는 각각 1번부터 n번까지 번호가 매겨져 있습니다. n명이 사람을 줄을 서는 방법은 여러가지 방법이 있습니다. 예를 들어서 3명의 사람 programmers.co.kr Approach 각 자리를 정하는 나름의 규칙을 찾고 그에 맞게 구현을 해야했던 문제이다. 참고로 순열을 이용한 풀이는 정확성 테스트는 통과되나, 효율성 테스트에서 통과되지 못한다. 문제에서 주어진 n = 3, k = 5인 케이스를 예로 들겠다. 3명이 줄을 설 수 있는 방법은 다음과 같이 6가지이다. [1, 2, 3] [1, 3..

    Head First: Design Patterns - 간단한 팩토리(Simple Factory)

    디자인 패턴: 간단한 팩토리(Simple Factory) 이 포스팅은 Head First: Design Patterns 책을 보고, 개인적으로 정리한 포스팅입니다. 피자가게 판매 시스템 피자가게에서 다음과 같은 코드로 가게를 운영하고 있다고 하자. public class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(..

    [Java] 프로그래머스 (야근 지수) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/12927 코딩테스트 연습 - 야근 지수 회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도 programmers.co.kr Approach 우선순위 큐(PriorityQueue)를 이용하여 문제를 풀었다. 자바의 PriorityQueue 는 Heap으로 내부동작이 이루어져서 시간복잡도가 O(NlogN)이다. N이 최대 1,000,000 이라 시간초과가 나지 않을까도 싶었지만 다행이도 시간초과는 나지 않았다. 우선순위 큐를 큰 숫자가 우선이 되게끔 Co..

    [AWS EC2 AMI2 Linux] 빌드 에러 - Cannot allocate memory

    AWS EC2에서 Spring Boot 프로젝트를 빌드할 때 아래와 같은 에러가 발생했다. 구글링을 참고하여 에러 해결방법을 정리해봤다. # OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 178978816 bytes for committing reserved memory. 원인..

    [java] 프로그래머스 (멀리 뛰기) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/12914 코딩테스트 연습 - 멀리 뛰기 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2 programmers.co.kr Approach 매우 간단한 DP 문제이다. DP[i] 를 i 칸에 도달할 수 있는 방법의 수라고 하였을 때, i 칸에 도달할 수 있는 방법은 (i - 2 칸에서 2칸으로 움직였을 경우) + (i - 1 칸에서 1칸으로 움직였을 경우)이다. 위의 문자대로 DP[i] = DP[i - 2] ..

    [java] 프로그래머스 (방문 길이) Level 3

    Problem : https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr Summer/Winter Coding(~2018) 문제였다. 두 가지 방법이 있지만 나는 여기서의 2번째 방법을 이용했다. 좌표평면 크기의 visited 배열을 선언하여 실제로 방문하였는지를 체크한다. HashSet을 이용하여 선분을 나타내는 무언가를 set에 양방향으로 추가하고 size / 2한다. 2번 풀이로 푸는게 매우 간단하다. 중복을 걸러야 하므로 int[] 배열 보다는, 두 점을 String 으로 묶어 set에 양방향으로 넣은 후, size / 2를 하면 정답이 된다. Code import org.junit.jup..