문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 풀이 주어진 info 값과 query문을 하나씩 비교해서 풀었더니, 효율성 검사에서 통과하지 못했습니다. 시간초과가 발생한 것이죠. 따라서, info를 탐색해 매 info마다 가능한(포함될 수 있는) 모든 경우의 수를 map의 key로 넣고, value에는 점수를 넣어 query에서 탐색하는 방법을 이용합니다. 이때, query에서 제시한 점수 이상인 info들의 값을 구하기 때문에..
IoC(Inversion of Control : 제어의 역전)와 DI(Dependency Injection : 의존성 주입)의 주 목적은 컴포넌트의 의존성을 제공하고 이를 라이프사이클 전반에 걸쳐 관리하는 보다 간편한 메커니즘을 제공하는 것 입니다. 의존성이 필요한 컴포넌트를 의존 객체(dependent object)라 하고 IoC에서는 이를 "대상(target)"이라고 합니다. 일반적으로 IoC는 의존성 주입(DI)과 의존성 룩업(DL)의 두 가지 하위분류로 나눌 수 있습니다. 이들 하위분류는 다시 구체적인 IoC 서비스 구현체로 나뉩니다. 이 분류체계를 그림으로 간단히 나타내면 다음과 같습니다. 위의 IoC의 종류에 대해 자세히 알아봅시다. IoC의 종류 의존성 룩업(Dependency Lookup ..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 풀이 우선, 문제의 조건을 확인해보면 이모티콘의 할인율은 10, 20, 30, 40(%)로 고정되어 있고, 입력으로 들어오는 이모티콘 종류의 개수도 최대 7개 입니다. 따라서, 재귀를 이용한 완전 탐색으로 구현했습니다. 재귀 함수는 이모티콘을 기준으로 진행됩니다. 재귀 함수의 파라미터에 index를 전달해 이모티콘 배열에 순차적으로 접근하도록 했습니다. Recursive Case ..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12952 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 풀이 N-Queen 문제는 행렬에 퀸을 놓았을 때, 서로 공격할 수 없는 상태가 되도록 배치하는 문제로, 전형적인 백트리킹 알고리즘입니다. 문제를 분석해보면 다음과 같습니다. 퀸은 하나의 행에 하나만 존재할 수 있다. 즉, 재귀함수 탐색의 기준(depth)으로 사용할 수 있습니다. 마지막 행에 퀸 배치를 성공한다면, 가능한 경우의 수가 하나 증가한다. 불가능한 경우는 탐색을 중단해 ..
이펙티브 자바를 읽다가 null에 대한 체크를 위해 Objects 클래스의 requireNonNull 을 사용하는 것을 알게 되었다. 따라서, 이에 대해 정리하고 왜 사용하는지에 대해 알아보자.requireNonNullrequireNonNull 은Java 7에 추가된 Objects 클래스에서 제공하는 Null 체크를 위한 메서드이다.파라미터로 입력된 값이 null이라면 NullPointerException(NPE)이 발생하고, 그렇지 않다면 입력값을 그래도 반환한다.Java 11을 기준으로 requireNonNull 은 다음과 같이 3가지로 오버로딩 되어있다. 리턴 타입(Return Type)메서드(Method)TrequireNonNull(T obj)TrequireNonNull(T obj, String ..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 💡 풀이 문제를 읽어보면, 도착 지점까지 가기 위한 최단거리를 구해야 하는 것에서 다익스트라를 떠올릴 수 있지만, 어느 지점까지 같이 이동한 후, 도착점 A, B로 이동하게 된다(물론, 아닌 경우도 있지만). 따라서, 한 지점에서 모든 지점까지의 최단거리를 구하는 것을 넘어서(다익스트라), 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 한다. 이때, 플로이드-워셜 알고리즘..