전체 글 682

[JAVA] 백준 2798번 블랙잭 : 브루트포스

2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 1. 문제 추상화 주어진 값들 중 세 개를 추출하여 블랙잭 수보다 같거나 작은 최대값을 구하시오. 2. 알고리즘 굉장히 쉬운 문제지만 브루트포스를 몰라 어렵게 풀었다;; 브루트포스(BruteForce)란, Brute( 무식한 )과 Force ( 힘 )의 합성어로 무식한 힘이라는 의미다. 다시 말해서, 무식하게 모든 경우의 수를 탐색하여 조건에 맞는 결과를 내놓는 알고리즘이 효율적일 때가 있다는 말이다. 나는 모든 경우의 수를 조사..

문제풀이 2021.07.28

[JAVA] 백준 2447번 별찍기-10 : 재귀함수

2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 1. 문제 추상화 입력된 값 N은 3의 거듭제곱이다. 만약 N이 3이면 출력은 아래와 같다. N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태로 출력하시오. 2. 알고리즘 어려운 문제다. 문제를 이해하기 힘들어서 인터넷을 찾아봐서 풀었다. 그래도 이번 문제를 통해 재귀함수를 깊이 이해할 수 있었다. 재귀적 사고와 선형적 사고는 다르다. 선형적 사고는 1..

문제풀이 2021.07.27

[스프링] 관심사의 분리 ( 관계설정 책임의 분리 )

[ 스프링 ] 관심사의 확장 ( 인터페이스 ) [ 스프링 ] 관심사의 분리 ( 클래스의 분리 ) [ 스프링 ] 관심사의 확장 ( 추상클래스 ) [ 스프링 ] 관심사의 분리 ( DAO ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. lordofkangs.tistory.com 지난 포스팅까지 인터페이스를 이용한 확장을 알아 보았다. 그러나 한 가지 문제가 있었다. UserDao 클래스의 관심사는 'DB 엑세스를 위한 SQL실행'이지 'ConnectionMaker 인터페이스의 구현객체와의 관계 설정'은 관심사가 아니다. UserDao 클래스가 한 가지 구현객체를 선택하면 두 클래스는 '종속'되어 버린다. 종속은 변화에 좋지 않은 관계이다. "느슨한 결합"을 유지해야한다. 관계 설정 ..

Dev/SPRING 2021.07.26

[JAVA] 백준 11729번 하노이 탑 이동 순서 : 재귀함수

11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 1. 문제 추상화 원판 개수에 따른 하노이탑 최소 이동 횟수와 이동 과정을 출력하시오. 2. 알고리즘 ▷ 하노이탑 개념 수학적 사고력이 뛰어나거나 하노이탑의 개념을 어느정도 알아야 풀 수 있는 어려운 문제이다. 나 또한 하노이탑에 대해서 잘 모르기에 여기저기 찾아보며 풀었다. 1번에 쌓여있는 원판들을 3번까지 옮겨야 한다. 단, 규칙이 있다. 1. 1회에 한 개의 원판만 옮길 수 있다. 2. 반드시 큰 원판 위에 작은 원판이 있어야 한다. 재귀적 사고..

문제풀이 2021.07.26

[JAVA] 백준 3053번 택시 기하학 : 유추

3053번: 택시 기하학 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다. www.acmicpc.net 1. 문제 추상화 반지름 r이 주어질 때, 유클리드 기하학의 원의 넓이와 택시 기하학의 원의 넓이를 구하라. 2. 알고리즘 택시 기하학을 모르는 경우와 택시 기하학을 아는 경우 두 가지 풀이 방법이 있다. 첫 번째 방법 ( 택시 기하학을 모르는 경우 ) 원의 정의는 같으나 택시 기하학을 모르면 어떤 원리로 원이 형성되는지 모른다. 다시 말해, '원주율'을 모른다. 그러나 이미 원주율이 예제에 주어져 있다. 유클리드 기하학에서 원주율은 ㅈ(파이)이다. 그리고 택시 기하학의 원주율은 2이..

문제풀이 2021.07.24

[JAVA] 백준 1002번 터렛 : 두 원의 교차점

1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 1. 문제 추상화 임의의 Z 지점이 있다. A점과 Z점 사이의 거리가 r1, B점과 Z점 사이의 거리가 r2를 만족할 때, Z 지점의 경우의 수를 구하라. 2. 알고리즘 Z점과 A점의 거리가 r1이 되는 경우의 수는 무한이다. 원이기 때문이다. Z점과 B점의 거리가 r2가 되는 경우의 수도 무한이다. 원이기 때문이다. 그러므로 r1과 r2를 동시에 만족하는 Z지점의 개수는 두 원의 교차점의 개수와 같다. 두 원의 위치관계, 내접, 외접 위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정..

문제풀이 2021.07.24

[스프링] 관심사의 확장 ( 인터페이스 )

[ 스프링 ] 관심사의 분리 ( 클래스의 분리 ) [ 스프링 ] 관심사의 확장 ( 추상클래스 ) [ 스프링 ] 관심사의 분리 ( DAO ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. ▷ 분리와 확장 분리와 확장을 고려한 설계는 lordofkangs.tistory.com 지난 포스팅에서는 관심사 분리를 메소드가 아닌 클래스로 해보았다. 하지만 여전히 확장성에 문제가 발생했다. 확장을 하려면 '추상화'를 해야한다. 추상화란, 구현 클래스 간의 공통된 특징을 하나로 묶는 것을 의미한다. [ 스프링 ] 관심사의 확장 ( 추상클래스 ) [ 스프링 ] 관심사의 분리 ( DAO ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. ▷ 분리와 확장 분리와 확장을 고려한..

Dev/SPRING 2021.07.24

[JAVA] 백준 3009 네 번째 점 : Simple is best

3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net 1. 문제 추상화 3개의 좌표가 주어 질 때, 직사각형을 만드는 네 번째 점의 좌표를 구하시오. 2. 알고리즘 코드는 단순함이 중요하다. 반복문, 조건문을 자주 사용하는 것보다 가독성 있는 코드를 지향해야한다. 1. 직사각형은 x축과 y축의 대칭이다. 그러므로 x좌표와 y좌표는 x1,x2 와 y1, y2 두 값만 가진다. 2. 주어진 세 좌표 중 x1,x2 와 y1, y2가 한 번만 나온 값이 네번째 좌표가 된다. 3. 코드 import java.io.BufferedReader; import java.io.BufferedWriter; impo..

문제풀이 2021.07.23

[스프링] 관심사의 분리 ( 클래스의 분리 )

[ 스프링 ] 관심사의 확장 ( 추상클래스 ) [ 스프링 ] 관심사의 분리 ( DAO ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. ▷ 분리와 확장 분리와 확장을 고려한 설계는 미래를 대비한다. 프로그램을 만들 때는 lordofkangs.tistory.com 지난 포스팅에서 추상클래스를 이용하여 관심사를 확장시켰다. 그러나 상속이라는 특성상 자식클래스는 부모클래스의 1가지 관심사만 상속할 수 없다. 확장성을 고려하여 추상클래스를 사용했지만 완벽한 분리가 이루어지지 않은 것이다. 그래서 이번에는 완벽한 분리를 위해, 하나의 관심사를 다른 클래스로 '분리'시킬 것이다. 추상클래스 코드 public abstract class UserDao { public abstract Conne..

Dev/SPRING 2021.07.22

[JAVA] 백준 1085번 직사각형에서 탈출 : 단서로 풀기

1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net 1. 문제 추상화 왼쪽 아래 꼭지점이 (0.0)이고 오른쪽 위 꼭지점이 (w,h)인 직사각형 안에 (x,y)좌표의 A 지점이 있다. A에서 직사각형 경계까지의 최소거리를 구하라. 2. 알고리즘 조건을 토대로 단서를 구체적으로 파악해야한다. 단서를 확보하지 않고 비슷한 문제의 알고리즘을 떠올려 템플릿 쓰듯 사용하면 효율적인 코드를 작성하지 못한다. 단서를 토대로 필요한 알고리즘이 무엇인지 생각해야한다. 첫 번째 방법 직사각형을 네 부분으로 나눈 후, ..

문제풀이 2021.07.22