목록분류 전체보기 (89)
빠에야는 개발중
물건 값보다 많은 돈을 낼 경우 거스름돈을 돌려주게 됩니다. 거스름돈은 한 금액의 돈으로 줄 수도 있지만, 여러 금액의 동전을 섞어 거슬러 줄 수 있습니다.거스름돈이 N원일 때, 1원, 2원, 5원 동전이 있다면 몇 가지 방법으로 돈을 거슬러 줄 수 있을까요? change 함수를 통해 경우의 수를 반환해주는 함수를 만들어 보세요. K에는 사용할 수 있는 동전의 종류가 들어 있습니다.예를 들어, N = 5이고 K = [1, 2, 5]이면 1원, 2원, 5원 동전을 가지고 5원을 맞추는 경우의 수를 찾으면 됩니다.1원 5개1원 3개, 2원 1개1원 1개, 2원 2개5원 1개이렇게 총 4가지 경우가 있으면, 4를 리턴해 주면 됩니다. 각각의 순서가 의미가 없기 때문에 bfs로는 풀 수 없을 것 같았고 dp를 ..
1x1 정사각형 2개가 붙어 있는 타일이 있습니다. 이 타일을 이용하여 총 3xN 의 보드판을 채우려고 합니다. 타일은 가로, 세로 두 가지 방향으로 배치할 수 있습니다.보드판의 길이 N이 주어질 때, 3xN을 타일로 채울 수 있는 경우의 수를 반환하는 tiling 함수를 완성하세요.단, 리턴하는 숫자가 매우 커질 수도 있으므로 숫자가 5자리를 넘어간다면 맨 끝자리 5자리만 리턴하세요.예를 들어 N = 2일 경우 3을 반환해 주면 됩니다. 하지만 만약 답이 123456789라면 56789만 반환해주면 됩니다. 리턴하는 숫자의 앞자리가 0일 경우 0을 제외한 숫자를 리턴하세요. 리턴타입은 정수형이어야 합니다.참고: 이 문제는 2 x n 타일링 문제와 유사합니다. 문제이해가 어려우면 2 x n 타일링 문제를..
과자를 좋아하는 동우는 책상 위에 일렬로 놓아진 과자를 발견하였습니다. 과자에는 맛을 숫자로 평가한 종이가 붙어 있습니다. 동우는 맨 왼쪽부터 순서대로 과자를 먹기로 하였습니다. 동우는 먹을 과자를 고를 때 이전에 먹은 과자보다 맛이 더 좋은 과자만 먹습니다.제일 처음에 맛이 3인 과자를 먹었다면, 다음에는 4보다 작은 맛의 과자는 먹지 않습니다.책상위에 놓인 과자의 맛이 입력되면, 동우가 최대 과자를 몇 개를 먹을 수 있는지 반환해주는 eatCookie 함수를 완성하세요.예를 들어 [1, 4, 2, 6, 3, 4, 1, 5] 가 입력된다면 동우는 1, 3, 5, 6, 8번째 과자(각각의 맛은 1, 2, 3, 4, 5)를 골라 총 5개를 먹을 수 있고, 5개보다 더 많이 먹을 수 있는 방법은 없으므로 5..
싱글톤을 사용하는 이유 싱글톤 패턴은 인스턴스를 어플리케이션 내에서 단 한번 생성하여 계속 사용하는 패턴이다.(동일한 객체) 이렇게 하면 우선 메모리를 아낄 수 있고, 전역 객체인 싱글톤 객체를 여러 메소드에서 공유 자원으로 사용하도록 할 수도 있다. 이는 주로 DBCP 같은 공통된 객체를 여러개 사용해야하는 상황에서 많이 사용한다. 문제점 싱글톤을 과도하게 사용하면 다른 인스턴스 간의 결합도가 높아져 OCP를 위반할 가능성이 있다. 이에 따라 수정 하기도 어렵고, 테스트도 어려워진다.멀티 쓰레드 환경에서 동기화 처리를 제대로 해주지 않으면 여러개의 인스턴스가 생기는 등의 문제가 발생할 수 있다.그래서 꼭 필요한 경우가 아니라면 사용을 지양하는 것이 좋다. (아니면 시스템에 맡겨버리던가) 싱글톤을 구현하..
템플릿 메소드 패턴이란 같은 이름의 추상 메소드를 다른 클래스에서 상속받아 각자 다르게 구현하는 패턴이다. 즉 상위 클래스에서 메소드의 "틀"을 제공하는 것인데, 그야말로 추상화 자체라고 할 수 있겠다. 아래의 코드에서 여러 교복 회사들이 같은 상위 클래스 UniformFactory를 상속하여 같은 이름의 메소드 makeUniform()을 사용하지만 그 구현 내용은 각자 다르다.1234567891011121314151617181920212223242526public abstract class UniformFactory { public void makeUniform() { button(); } abstract void button();} public class Smart extends UniformFact..
팩토리 메소드 패턴이란, “어떤 인스턴스의 생성을 하위 클래스에서 담당하도록 하는 패턴”이다. 팩토리 메소드 패턴을 사용하면 조건에 따라 다른 종류의 구상 인스턴스를 생성해줄 수 있기 때문에 추상화의 효과를 볼 수 있다. 더불어 팩토리 메소드에 static을 사용하면 인스턴스를 싱글톤으로 관리할 수도 있다. 예를 들어 다음 코드를 보자. 치킨 가게에서 여러 종류의 치킨을 판매하고 싶다. 그런데 들어가는 재료의 차이를 빼고는 모든 공정이 동일하다. 그렇다면 각각의 메뉴별로 하위 클래스를 만들어줘서 그 속에서 인스턴스를 생성하면 추가되는 작업들은 팩토리 메소드만 수정할 뿐 다른 공통의 작업들은 수정할 필요가 없어진다(OCP). 또한 각각의 메소드들을 분리하였고 객체를 생성하는 메소드도 따로 존재하기 때문에 ..
N명의 사람이 있을 때, N명의 사람을 서로 다른 방법으로 줄을 세우는 방법은 N!개가 존재합니다.이 때 각각의 사람들에게 번호를 매겨서 줄을 서는 방법을 표시합니다. 예를들어 [1,2,3,4]는 1번 사람이 제일 앞에, 2번 사람이 2두번째에... 서 있는 상태를 나타냅니다.이러한 각각의 방법을 사전순으로 정렬했을때 K번째 방법으로 줄을 세우는 방법을 찾아 보려고 합니다.예를 들어 3명의 사람이 있다면 총 6개의 방법은 다음과 같이 정렬할 수 있습니다.1번째 방법은 [1,2,3]2번째 방법은 [1,3,2]3번째 방법은 [2,1,3]4번째 방법은 [2,3,1]5번째 방법은 [3,1,2]6번째 방법은 [3,2,1]이 때 K가 5이면 [3,1,2]가 그 방법입니다.사람의 수 N과 순서 K를 입력받아 K번째 ..
N개의 원판은 총 2N -1 번의 과정을 거쳐 이동할 수 있습니다. 하지만 어떠한 과정으로 원판을 옮겨야 2N -1 번만에 옮길 수 있는지는 아직 모릅니다. 원판이 N개 있을 때, Hanoi 함수에서 어떠한 과정으로 2N -1 번만에 옮길 수 있는지 과정을 리턴하세요.리턴값의 표기 방법은 다음과 같습니다.3개의 기둥은 순서대로 각각 1, 2, 3번으로 표기합니다.원판을 기둥1에서 기둥3으로 이동했다면 [1, 3]으로 표기합니다.원판을 기둥3에서 기둥1로 이동했다면 [3, 1]로 표기합니다.이러한 이동 순서를 담는 배열을 리턴하면 됩니다. 예를들어 N이 2라면 아래 그림과 같이 옮길 수 있으므로 리턴값은 [ [1,2], [1,3], [2,3] ]입니다. 기본적인 하노이탑 문제인데, 재귀를 사용한다는건 알았..
1x1 정사각형 2개가 붙어 있는 타일이 있습니다. 이 타일을 이용하여 총 2xN 의 보드판을 채우려고 합니다. 타일은 가로, 세로 두 가지 방향으로 배치할 수 있습니다.보드판의 길이 N이 주어질 때, 2xN을 타일로 채울 수 있는 경우의 수를 반환하는 tiling 함수를 완성하세요.예를들어 N이 7일 경우 아래 그림이 타일을 배치할 수 있는 한 경우입니다. 단, 리턴하는 숫자가 매우 커질 수도 있으므로 숫자가 5자리를 넘어간다면 맨 끝자리 5자리만 리턴하세요.예를 들어 N = 2일 경우 가로로 배치하는 경우와 세로로 배치하는 경우가 있을 수 있으므로 2를 반환해 주면 됩니다. 하지만 만약 답이 123456789라면 56789만 반환해주면 됩니다. 리턴하는 숫자의 앞자리가 0일 경우 0을 제외한 숫자를 ..
1,2,4 세 개의 숫자만 쓰는 124나라가 있습니다.124나라에서 사용하는 숫자는 다음과 같이 변환됩니다.10진법의 1 → 110진법의 2 → 210진법의 3 → 410진법의 4 → 1110진법의 5 → 1210진법의 6 → 1410진법의 7 → 2110진법의 수 N이 입력될 때, 124나라에서 쓰는 숫자로 변환하여 반환해주는 change124 함수를 완성해 보세요. 예를 들어 N = 10이면 “41”를 반환해주면 됩니다.리턴 타입은 문자열입니다. 어렴풋이 떠오른 풀이 방법은 3으로 나누는 것이었다. 실제로 예시는 마치 3진수를 0을 3으로 바꾸고 3을 4로 바꾼 모습이기 때문이다. 그런데 한가지 문제가 있었는데, 그것은 1, 2, 4로만 숫자를 표시해야하기 때문에 3으로 나누어 떨어졌을 때 자리수를 ..