전체 글(605)
-
백준(Backjoon) 10610, 30
문제풀이 배수 판정법에 따르면 30의 배수 판정법은 3의 배수이면서 일의 자리가 0인수이면 30의 배수로 판정 가능하다. 3의 배수는 각 자리의 수의 합이 3 배수이면 3의 배수이다. 따라서 30의 배수는 각 자리의 합이 3의 배수이고 일의 자리가 0인수이면 30의 배수이다. N은 10^5개의 숫자로 구성되어 있기 때문에 정수 변수로 받지 않고 문자열 변수로 받아서 각 자리의 숫자를 쪼개서 정수형 리스트에 저장한다. 그리고 30배수가 되는 가장 큰수를 찾기 위해서 저장한 정수형 리스트를 내림차순으로 정렬하여 30 배수 판정법을 적용한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; i..
2021.06.23 -
백준(Backjoon) 1032, 명령 프롬프트
문제풀이 위의 파일 이름들에 따른 패턴을 구하기 위해서는 패턴 문자열("config.sys") 변수를 초기화 한다음 다른 파일 이름 문자열들과 각각 문자를 비교하여 문자가 다른 부분은 "?"로 대체한다. 하나의 파일 이름 문자열과의 비교가 종료되면 패턴 문자열 변수를 새롭게 생성한 패턴으로 변경하고 다른 파일 문자열과 비교를 반복 수행한다. 소스 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Main { /* files들의 패턴 탐색*/ public static Str..
2021.06.23 -
백준(Backjoon) 1100, 하얀칸
문제풀이 체스판의 행(row)과 열(col)은 (0,0)부터 시작하고 하얀색이다. 그리고 검정칸과 하얀칸은 번갈아 색칠되어 있기 때문에 예제 입력1에 따른 체스판의 상황은 아래 그림과 같다. 위의 그림에서 빨간색 F(7,3)만이 하얀색 칸에 있으므로 정답에 카운트된다. 위 체스판에서 행(row)의 값을 2로 나누었을때 나머지값이 0이 나온다면 짝수 열(0열 포함)의 칸이 하얀색인 것을 알 수 있다. 반대로 나머지 값이 1이 나온다면 홀수 열의 칸이 하얀색인 것을 알 수 있다. 따라서 이중 반복문을 통하여 하얀색 칸만을 참조하여 하얀칸 자리의 값이 "F"인지 검사하고 카운트하면 된다. public class Main { public static int solution(String[][] map) { int..
2021.06.23 -
14. 컴퍼지트 패턴(Composite Pattern)
14.1 컴퍼지트 패턴 컴퍼지트 패턴은 부분-전체(Part-Whole)의 관계를 갖는 객체들을 정의할 때 유용하다. 예를 들어 Computer가 존재하면 그에 따른 Monitor, Body 등의 부품이 존재하고 Computer는 전체, Monitor, Body와 같은 부품들은 부분이 된다. 이러한 경우 부분 객체의 추가나 삭제 등이 있어도 전체 객체의 클래스 코드를 변경하지 않으면 컴퍼지트 패턴은 유용하다. 컴퍼지트 패턴은 전체-부분의 관게를 갖는 객체들 사이의 관계를 정의할 때 유용하다. 그리고 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있다. 컴퍼지트 패턴의 컬레보레이션 Component : 구체적인 부분, 즉 Leaf 클래스와 전체에 해당하는 Composite 클래스에 ..
2021.06.14 -
13. 추상 팩토리 패턴(Abstract Factory Pattern)
13.1 추상 팩토리 패턴 추상 팩토리 패턴은 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다. 밑에서 설명할 엘리베이터 예제에서 볼 수 있듯이 LG 부품을 위한 코드는 LG의 모터와 문을 이용할 것이다. 만약 현대 부품을 지원하도록 코드를 수정해야 한다면 모터와 문이 일관성 있게 LG에서 현대로 변경되어야 한다. 바로 이러한 경우에 부품별로 Factory를 정의하는 대신 관련 객체들을 일관성 있게 생성할 수 있도록 Factory 클래스를 정의하는 것이 효과적이다. 예를 들어 Motor 클래스를 위한 MotorFactory 클래스와 Door 클래스를 위한 DoorFactory 클래스를 정의하는 대신 LG 부품들을 위한 LGFactory 클래스와 현대 부품들을 위한 HyundaiF..
2021.06.10 -
12. 팩토리 메서드 패턴(Factory Method Pattern)
12.1 팩토리 메서드 패턴 팩토리 메서드 패턴은 객체의 생성 코드를 별도의 클래스/메서드로 분리함으로써 객체 생성의 변화에 대비하는데 유용하다. 아래에서 설명할 엘리베이터 스케줄링의 예에서 볼 수 있듯이 프로그램이 제공하는 기능은 상황에 따라 변경될 수 있다. 그리고 특정 기능의 구현은 개별 클래스를 통해 제공되는 것이 바람직한 설계이다. 따라서 기능의 변경이나 상황에 따른 기능의 선택은 바로 해당 객체를 생성하는 코드의 변경을 초래한다. 게다가 상황에 따라 적절한 객체를 생성하는 코드는 자주 중복될 수 있다. 이런 경우 객체 생성 방식의 변화는 해당되는 모든 코드 부분을 변경해야 하는 문제를 일으킨다. 팩토리 메서드 패턴의 개념 위 그림의 왼쪽처럼 여러 개의 클래스(클래스 A, 클래스 Z 등)에서 필..
2021.06.10