전체 글
-
[JAVA] 1929번: 소수 구하기Algorithm/백준 알고리즘 2021. 7. 18. 20:31
문제 설명 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. 에라토스테네스의 체 k=2부터 루트N이하까지 반복하여 자연수들 중 k를 제외한 k의 배수들을 제외시킨다. k=2일 경우, 2를 제외한 2의 배수를 모두 지워준다. k=3일 경우, 3을 제외한 3의 배수를 모두 지워준다. k=4일 경우, 이미 k=2에서 제외되었기 때문에 넘어간다. k=5일 경우, 5를 제외한 5의 배수를 모두 지워준다. 위와같은 방식을 반복하여 k=루트N까지 반복하는 방법이다. 코드 import ..
-
[JAVA] 17427번: 약수의 합2Algorithm/백준 알고리즘 2021. 7. 18. 18:24
문제 설명 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더한 값이고, f(A)로 표현한다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)로 표현한다. 자연수 N이 주어졌을 때, g(N)을 구해보자. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 g(N)를 출력한다. 풀이 1. N의 최댓값이 1,000,000이므로 1부터 n까지 약수를 구한 후 합을 구하면 시간초과가 날 것이다. 2. 1부터 n까지의 약수를 적어보고 약수들의 갯수를 보면 규칙을 ..
-
[Spring/디자인패턴] 디자인패턴Framework/Spring 2021. 7. 17. 00:29
디자인 패턴 자주 사용되는 설계 패턴을 정형화하여 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계 알고리즘과 유사하지만, 명확하게 정답이 있는 형태는 아니며 프로젝트의 상황에 맞추어 적용 가능하다. Gof 디자인 패턴 - Gof의 디자인 패턴은 총 23개이며 이를 잘 이해하고 활용한다면 경험이 부족하더라도 좋은 소프트웨어 설계가 가능하다. 디자인 장점 개발자(설계자) 간의 원활한 소통 소프트웨어 구조 파악 용이 재사용을 통한 개발 시간 단축 설계 변경 요청에 대한 유연한 대처 디자인 단점 객체지향 설계/구현 초기 투자 비용 부담 생성패턴 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하고, 코드의 유연성을 높여준다. - Factory ..
-
[Spring] 객체지향 설계 5원칙 SOLIDFramework/Spring 2021. 7. 17. 00:08
응집도와 결합도 좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높여야한다. 결합도 - 모듈간의 상호 의존 정도를 나타내는 지표로써, 결합도가 낮으면 모듈간의 상호 의존성이 줄어들어 재사용 및 유지보수가 유리하다. 응집도 - 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져, 재사용 및 유지보수가 용이하다. SRP(Single Responsibility Principle) 단일 책임 원칙 - 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐이여야한다. OCP(Open Closed Principle) 개방 폐쇄 원칙 - 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다. - 상위 클래스 또는 인터페이스를 중간..
-
[Spring] 객체지향 4가지Framework/Spring 2021. 7. 16. 23:52
캡슐화 캡슐화는 객체의 속성을 보호하기 위해 사용 Method 설계 - 속성이 선언되었으나 이의 상태를 변경하는 Method가 없다면 잘못 선언된 속성이다. - 실물 객체가 가진 기능을 모두 제공해주어야 한다. - 각각의 Method는 서로 관련성이 있어야 한다. - 객체 안의 Method는 객체 안의 속성을 처리해야 하며, 다른 객체를 전달받아 해당 다른 객체에 정의 된 속성을 직접 처리하면 안된다. - 단 Method에 실행에 필요한 값들은 객체의 형태가 아닌 매개변수의 형태로 전달되어져야한다. 장점 - 객체 지향의 패러다임 중 하나인 추상화를 제공한다. - 재 사용성 향상 무결성 - 보통의 캡슐화 코딩이라고 한다면, 주로 변수는 private로 선언하고 Method를 public으로 선언하는 형태를..
-
[Spring] 객체지향이란?Framework/Spring 2021. 7. 15. 00:06
객체지향의 등장 객체지향 이전에는 C언어처럼 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 "절차 지향"이 주를 이루었다. => 이와 같은 코딩하는 언어들을 "절차지향 언어"라고 지칭한다. 이 당시에는 프로그램의 단위가 크지 않았고, 대체적으로 간단한 로직을 순차적으로 처리하여 결과를 얻는데 그쳤지만, 컴퓨터의 발전과 이로 인한 프로그램의 복잡도가 증가하며 이에 들어가는 유지보수, 개발기간등 다양한 방면에서 비효율이 발생하였다. 위의 비효울적인 부분을 개선하고자 "효과적인 개발방식"을 채택하게 되었고 객체지향의 특성인 추상화, 상속, 은닉, 재사용, 인터페이스등 여러 곳에서 객체지향으로 개발을 시작하였다. 객체지향이란 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의하고 절..
-
ㄴㅇㅁ카테고리 없음 2021. 7. 13. 16:03
=> +- 와 */순서 해야함 /* A*(B+C) - AStack에 A를 넣는다. - BStack에 *를 넣는다. - AStack에 B를 넣는다. - BStack에 +를 넣는다. => *+ - AStack에 C를 넣는다. => ABC - AStack에 BStack을 POP을 수행하여 넣는다. => ABC+* (A+(B*C)) - (D/E) - '('를 만나거나 없을 경우 Stack에 넣고, ')'를 만났을 경우 BStack에 있는 원소 POP - AStack에 A를 넣는다. - BStack에 +를 넣는다. - AStack에 B를 넣는다. - BStack에 *를 넣는다. => +* - AStack에 C를 넣는다. => ABC - AStack에 BStack을 POP수행하여 넣는다. =>ABC*+ - BSta..
-
[JAVA] 1935번: 후위 표기식2Algorithm/백준 알고리즘 2021. 7. 12. 17:42
문제 설명 후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오. 입력 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. (3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 정수이다) 출력 계산 결과를 소숫점 둘째 자리까지 출력한다. 코드 /* 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는..