전체 글 669

[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 ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. ▷ 분리와 확장 분리와 확장을 고려한..

SPRING/Spring Basic 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..

SPRING/Spring Basic 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

[JAVA] 백준 9020번 골드바흐의 추측 : 소수의 합

9020번: 골드바흐의 추측 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아 www.acmicpc.net 1. 문제 추상화 짝수는 두 소수의 합으로 표현 가능하다. 이 때, 두 소수의 차이가 최소인 경우를 출력하시오. 2. 알고리즘 첫 번째 방법 조건 : 짝수 - 작은 소수 = 큰 소수 해당 조건을 만족하는 작은 소수를 구한다. 작은 소수 중 가장 큰 소수일 때, 두 소수의 차이가 작다. 두 번째 방법 C는 짝수 C/2 +C/2 = C C/2-1 + C/2+1 = C C/2-2 + C/2+2 = C . . 반복문을 통해, 하나는 -1 씩, 하나는..

문제풀이/Math 2021.07.22

[스프링] 관심사의 확장 ( 추상클래스 )

[ 스프링 ] 관심사의 분리 ( DAO ) 스프링 프레임워크를 사용하기 위한 기본 개념을 하나씩 정리해볼까 한다. ▷ 분리와 확장 분리와 확장을 고려한 설계는 미래를 대비한다. 프로그램을 만들 때는 '분리'와 '확장'을 고려해야한 lordofkangs.tistory.com 지난 포스팅에서 관심사의 분리에 대해서 알아보았다. 코드는 '관심사'가 있다. 관심사 별로 분리해줘야 유지보수가 용이하다. 관심사 분리 지난 포스팅에서 DAO 객체의 코드를 관심사 별로 분리하였다. 세부적으로 들어가면 더 많은 관심사로 나눌 수 있지만 크게 세 가지로 나눌 수 있다. 1. DB접근 객체 생성 2. 레코드 삽입 3. 레코드 추출 세 가지 관심사를 메소드 별로 '분리'하였다. public class UserDao { //D..

SPRING/Spring Basic 2021.07.21

[JAVA] 백준 1929번 소수 구하기 : 아리스토테네스의 체

1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 1. 문제 추상화 M과 N 사이의 소수를 출력하시오. 2. 알고리즘 첫 번째 방법 ( % 연산 ) 1. M부터 N까지의 자연수를 반복문 변수 i에 저장한다. 2. 이중 for문을 만들어, % 연산을 통해 소수여부를 판단한다. 3. 소수여부는 플래그 변수를 만들어 true, false로 파악한다. 두 번째 방법 ( 아리스토테네스의 체 ) 1. N + 1 크기의 boolean 배열을 만든다. 2. 이중 for문 구조를 만들어, 2의 배수, 3의 배수.... 를 true로 저장한다. 3. true로..

문제풀이/Math 2021.07.21