소프트웨어 스터디 8

[프로그래머스] L3 입국심사

문제 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다. 입국심사를 기다리는 사람 수 n, 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 times가 매개변수로 주어질 때, 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제한사항 입국심사를 기..

Builder Pattern - 빌더패턴

정의 해당 패턴은 생성자를 통해 직접 생성하지 않고, 빌더라는 내부 클래스를 통해 간접적으로 생성하는 패턴입니다. 그렇다면 왜 굳이 이렇게 해야하는가? 팩토리패턴과 무엇이 다른가 의문이 드는 부분이 있습니다. 빌더패턴은 객체를 생성할 때 생성자등에 다양한 파라미터가 들어가야하는 경우에 쓰여진다고 볼 수 있습니다. 코드 샌드위치 예제로 사용해보도록 하겠습니다. public class Sandwich { enum BreadType { Flat, Bun, Roll } public Sandwich(BreadType breadType) {...} public Sandwich(BreadType breadType, boolean meat) {...} public Sandwich(BreadType breadType, ..

Factory Method Pattern

정의 Factory method pattern은 interface나 abstract class로 정의된 오브젝트를 직접 생성하는 것이 아니라 이 생성을 subclass가 결정하여 하도록 하는 것입니다. 결론적으로 객체를 subclass가 만든다 입니다. 말로 설명하는 것 보단 코드를 보는게 더 이해가 쉽겠죠? 코드 도형을 생성하는 것을 예제로 코드를 구성해보려고 합니다. public interface Shape { void draw(); } interface로 Shape을 만들고 사용할 도형들을 아래와 같이 구현합니다. enum ShapeTypes { Ellipse, Rectangle, Polygon } public class Ellipse implements Shape { @Override public..

[프로그래머스] L2 위장

문제 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothes의..

[프로그래머스] L1 내적

문제 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 제한사항 a, b의 길이는 1 이상 1,000 이하입니다. a, b의 모든 수는 -1,000 이상 1,000 이하입니다. 풀이 간단한 구현문제입니다. 두 개의 배열에서 같은 index의 값을 곱해 더하면되는 문제 그대로입니다. 배열의 길이도 1000 이하로 적기 때문에 속도 문제도 고민할 필요 없어보이며 a,b의 곱으로 integer 범위를 벗어날 일도 없어보입니다. public int solution(int[] a, in..

Singleton 패턴

위키피디아에 따르면 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. 즉 프로그램 전역적으로 단 하나의 객체만 존재하며 사용된다라고 해석이 됩니다. public class Singleton { private static Singleton instance; public static Singleton getInstance() { if (instance == null) { in..

[프로그래머스] L2 이진 변환 반복하기

문제 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 c를 2진법으로 표현한 문자열로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 1이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다. 풀이 사실 처음 문제를..

[프로그래머스] L1 자릿수 더하기

문제 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 풀이 문제 그대로 자연수의 각 자리수를 더하여 결과로 리턴하는 문제입니다. 간단한 문제로 두가지 방법으로 풀어보았습니다. 어렵지 않은 문제기 때문에 설명할 부분도 별로 없는 듯 합니다. 1. 각 자릿수를 나눗셈을 이용하여 구분하기 모듈러 연산자를 이용하여 각 자릿수를 구해 더하는 방법입니다. public int solution(int n) { int input = n; int answer = 0; while(input > 0) { answer += (i..