전체 글

전체 글

    [Java] IoC, DI, 컨테이너

    IoC(Inversion of Control)란? 제어의 역전이라는 뜻입니다. 프로그램의 흐름을 개발자가 아닌 프레임워크가 제한하는 것을 말합니다. 말로는 잘 이해가 안되니 코드로 설명하겠습니다. 주문 시스템 클래스 다이어그램 OrderServiceImpl 클래스 public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy; public OrderServiceImpl(DiscountPolicy iscountPolicy) { this.discountPolicy = discountPolicy; } ... } AppConfig 클래스 public class AppConfig { public O..

    [Java] Spring과 SOLID - 2편

    이전 게시글에 이어서 OCP와 DIP에 대해서 설명하겠습니다. 목차 OCP, DIP정의 위반 사례 해결방안 정의 OCP(Open/closed priciple) : 확장에는 열려있으며 변경에는 닫혀있습니다. DIP(Dependency inversion priciple) : 추상화에만 의존해야지, 구체화에 의존하면 안 됩니다. 이 정의만 봐서는 잘 이해가 안 됩니다. 따라서 코드를 가지고 설명하겠습니다. 회원 도메인입니다. 기능은 보시는 대로고, 회원 정보를 메모리에 저장 할 수도 있고, DB나 외부 시스템을 사용할 수 있기 때문에 미확정입니다. 클래스 다이어그램입니다. 그럼 위의 클래스 다이어그램의 MemberServiceImpl을 구현해봅시다. public class MemberServiceImple i..

    [Java] Spring과 SOLID - 1편

    이번에는 스프링과 SOLID에 대해서 알아봅시다. 목차 스프링이란? 객체지향이란? SOLID란? 서론 저는 엔테크서비스 인턴 면접중 이런 질문을 받았습니다. "스프링에 대해서 설명해주세요." 스프링에 대해서 잘 안다고 할 순 없지만 그래도 관련 플젝 경험이 몇 번 있기 때문에, 자신있게 대답했죠. "웹 서버를 만들기 쉽게 하기위한 라이브러리들의 집합이며, DB 연결도 편리하게 해주는 역할을 합니다. 또한 유지보수 측면에서 효과적이고, 기본적인 구조는 동일하기 때문에 개발자들 끼리 의견공유가 쉬워집니다..." 틀린 말은 아닙니다. 그 당시엔 정답이라고 생각했지만, 지금 생각해보면 면접관이 원하는 답은 아니라고 생각합니다. 결정적으로 면접관 얼굴표정도 그닥 만족스럽지 않았구요. 그래서 이번 기회에 다시 한번..

    [devmoon]백준 14938 - 서강그라운드

    https://www.acmicpc.net/problem/14938 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 1. 유형 shotest path 2. 시뮬레이션 최단거리 구하는 문제입니다. 추가적인 조건 없이 정석적인 다익스트라, 플로이드와샬을 구현할 수 있다면 어려울거 없는 문제입니다. 시간복잡도가 100^3이기 때문에 플로이드와샬도 사용가능합니다. 다익스트라 인접리스트 구현 1~N번 노드까지 시작노드 설정하고 다익스트라 돌리기 플로이드 와샬 2차원 배열 구현 플로이드와샬 알고리즘 돌리기 3. 코드 다익스트라..

    [devmoon]백준 18403 - (Java) 무기공학

    https://www.acmicpc.net/problem/18430 18430번: 무기 공학 첫째 줄에는 길동이가 가지고 있는 나무 재료의 세로, 가로 크기를 의미하는 두 자연수 N, M이 주어진다. (1 ≤ N, M ≤ 5) 다음 N개의 줄에 걸쳐서, 매 줄마다 나무 재료의 각 위치의 강도를 나타내 www.acmicpc.net 1. 유형 백트래킹, 구현 2. 시뮬레이션 로직 2중 반복문으로 범위 탐색 부메랑 부분 체크 최대값 확인 시뮬레이션을 돌리면 위의 그림처럼 여러가지 경우의 수가 나옵니다. 특히, 노란색 ㄱ모양 부메랑을 만들고, 그 후에 빈칸에 따라 만들수 있는 부메랑을 확인합니다. 즉, 부메랑 한개를 만들때마다 재귀를사용하면 됩니다. 이때 범위지정을 잘 해야합니다. 3*3인 경우 아래같은 범위만..

    [devmoon]백준 15566 - (Java)개구리1

    https://www.acmicpc.net/problem/15566 15566번: 개구리 1 연못 안에 개구리들이 있을 수 있는 연꽃 N개와, 연꽃 사이를 연결하는 다리 역할의 통나무 M개가 있다. 같은 연꽃 쌍을 연결하는 통나무의 개수는 1개 이하이다. 여기에 N마리의 개구리가 각각 www.acmicpc.net 1. 유형 구현, 백트래킹 2. 시뮬레이션 로직 각 연꽃마다 앉을 개구리를 매칭 (재귀사용) 연결된 연꽃의 개구리 끼리 주제가 맞는지 확인 분류는 백트래킹이지만 단순 구현 비중이 더 큰거 같습니다. 우선 재귀를 사용하여 하나의 연꽃에 하나의 개구리를 매칭시켜야 합니다. 이때 재귀를 사용합니다. 모든 개구리가 매칭이 됐으면, 두 연꽃끼리는 하나의 주제가 있습니다. 해당 주제에 대한 개구리들의 관심..

    [devmoon]백준 2504 - (Java) 괄호의 값

    https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 1. 유형 스택, 문자열 2. 시뮬레이션 난이도에 비해 예외케이스가 많아서 까다로웠던 문제. 로직 여는괄호 ( [ 와 닫히는괄호 ) ]가 연속해서 붙어있는 경우에 합을 계산. 예외처리를 신경써야한다. - 맨 앞에 여는괄호가 나오는 경우 )() -> 0 - 길이가 1인 경우 ) -> 0 - 짝이 안 맞는 경우 (() -> 0 3. 코드 import java.io.*; import java.util..

    [devmoon]백준 - 17609 (Java) 회문

    https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 1. 유형 문자열 2. 시뮬레이션 투포인터 사용 두 문자가 다른 경우 왼쪽을 삭제하는 경우와, 오른쪽을 삭제하는 경우가 존재 두 경우를 모두 탐색하기 위해 재귀사용 3. 코드 import java.io.*; import java.util.*; public class Main { static String s; static int answer; public static void main(String[] args) throws IO..

    [devmoon]백준 1062 골드4 - (Java) 가르침

    https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 1. 유형 백트래킹, 조합 2. 시뮬레이션 26개 알파벳으로 K개의 조합 구함 만든 조합으로 문자열을 만들수 있는지 체크 위의 예시처럼 'a' 't' 'n' 'c' 'i'는 처음부터 들어있기 때문에 신경쓸 필요가 없다. 따라서 파란색칸만 중복확인을 하면 된다. 필요한 지식 조합구하기 -> 재귀사용 중복체크 -> 비트마스크 / HashSet / 26크기의 배열 사용 가운데 문자열만 슬라이싱 ..

    [devmoon] 골드4 백준 - 2661 좋은 수열

    https://www.acmicpc.net/problem/2661 2661번: 좋은수열 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다. www.acmicpc.net 1. 유형 순열, 백트래킹 2. 시뮬레이션 N자리로 만들 수 있는 수를 순열을 구한다 한자리씩 추가할때마다, 반복하는 부분이 있는지 파악한다 만약 반복이 되면 그 자리에서 return한다 (백트래킹) 3. 코드 import java.io.*; import java.util.*; public class Main { static String ANS; public static void main(String[] ar..