본문 바로가기

전체 글

(276)
Programmers - 연속 펄스 부분 수열의 합 with JAVA 로직 1. 1,-1,1,-1,1,-1 .... , -1,1,-1,1,-1,1 을 곱한 수열을 각각 판단한다. 2. DP를 활용해 최댓값을 구한다. 3. 두가지 수열이 가질 수 있는 각각의 최댓값 중 큰 값을 반환한다. 메인 아이디어 : "DP, 현재 수의 앞의 있는 값들의 합이 음수라면 고려하지 않는다. 즉, 연속 집합에서 앞의 집합의 합이 음수라면 더이상 지금의 집합부터는 더 큰수를 만들 수 없으니 버린다." 예를 들어, 1에서 곱한 값이 아래와 같다고 가정하자. 11, -3, -6, -1, 3, 1, 2, -4 [11] -> Max = 11, sum = 11 [11, -3] -> Max = 11, sum =8 [11, -3, -6] -> Max = 11, sum = 2 [11, -3, -6, -1] ..
Programmers - 시소짝궁 with JAVA 로직 아이디어 : 무게에 (1, 1/2, 2/3, 3/4, 4/3, 3/2, 2)를 곱한 값이 다른 사람들 중 존재한다면 answer += 1 이다. 몰랐던 점 : 같은 무게라도 다른 사람이다. 따라서 Map의 모든 값을 더해줘야한다. 코드 1 - Map을 활용해 메모이제이션한 경우 import java.util.*; class Solution { public long solution(int[] weights) { long answer = 0; double[] times = {1.0, 2.0/4, 3.0/4, 2.0/3, 4.0/3, 3.0/2, 2.0}; Map map = new HashMap(); for(double weight : weights) { map.put(weight, map.getOrDe..
UNIT TEST - JUNIT5, Mockito Mockito - 개발자가 동작을 직접 설정하는 방식으로 가짜 객체를 만들어주는 테스트 프레임 워크 - 가짜 객체를 만들어 Spring내 객체간의 의존성 없이 테스팅이 가능하게 만들어준다. - 가짜 객체로 시뮬레이션(Stub)하여 단위 테스트를 진행하는 원리 관련 애너테이션 - @Mock : 가짜 객체를 만들어 줌. - @Spy : 시뮬레이션을 만들지 않은 메서드 사용시 해당 클래스의 실제 메서드를 그대로 사용하게 해줌 - @InjectMocks : @Mock, @Spy 둘 중 하나로 생성된 가짜 객체를 자동 주입. JUNIT5 + Mockto - 둘을 같이 쓰기 위해서는 결합이 필요하다. - 아래 내용을 클래스 상단에 작성 @ExtendWith(MockitoExtension.class) Mock객체에 ..
Programmers - 택배 배달과 수거하기 with JAVA 로직 아이디어 : 갈때 가장 먼 집부터 택배소 방향으로 Cap 만큼 택배를 전달한다.(가장 먼 곳을 먼저 빨리 전달하고 더 이상 안가겠다는 마인드), 수거시에도 마찬가지로 가장 먼곳부터 비우겠다는 마인드로 택배를 가져온다. 1. deliveries, pickups의 값들 중 가장 인덱스가 높으면서 0이아닌 인덱스를 구한다. -> p_index, d_index (초기값은 -1, -1로 정할 것 -> 모두 0일 수도 있기 때문에) 2. (둘 중 높은 인덱스 + 1) * 2를 answer에 더해준다. -> 이 곳 부터 방문하므로 3. deliveries와 pickups 각각 가장 먼곳부터 Cap만큼 전달 및 수거를 처리한다. 4. 둘 중 하나의 인덱스가 하나라도 -1이 아니라면 2번부터 계속 반복한다. 코드 ..
Programmers - 순위 검색 with JAVA (V) 로직 1. Map을 만든다. 예시 : java, backend, senior, pizza -> javabackendseniorpizza, javabackendsenior-, javabackend--, java--- 등 시간 복잡도 : 50000 * 16 = 80만 (+) HashMap 만들때, 시간 복잡도를 낮추기 위해 아래와 같이 작성한다. 기존에는 map.get(value)를 하나하나 불러와 입력해서 시간복잡도가 늘어남. for(String value : new_values){ if(map.get(value) == null){ List nowList = new ArrayList(); nowList.add(score); map.put(value, nowList); continue; } map.get(v..
mappedBy, Cascade 단방향 : 한쪽 엔터티만 반대쪽을 아는 것. 양방향 : 서로 아는 것, 서로 참조하는 관계. -> 조회나 수정을 각각 하는가 한번에 가능한가 차이. mappedBy 배경 보통 RDBMS에서는 조인관계에 대해서 방향을 따지지 않는다. 이는 외래키를 통해 두 관계에 서로 접근이 가능하기 때문이다. 객체 관계에서는 @ManyToOne, @OneToMany @OneToOne 등을 이용해 관계를 정해서 매핑한다. (하지만 이것만 적용하면 단방향 관계가 된다.) 예를 들어, 학교-학생 관계가 있다고 가정하자. DBMS에서는 학생은 학교 아이디를 자신이 가지고 있고 이를 통해 학교에 대한 정보를 확인할 수 있다. 반대로, 학교는 학생 테이블에서 자신의 학교 아이디를 갖는 학생들을 조회할 수 있다. 하지만 객체에서는 ..
CI/CD CI / CD (Continuous Integration/Continuous Deployment) - 정의 : 지속 적으로 코드를 합치고 지속적으로 코드를 배포한다. - 필요한 이유 : 만약 CI/CD 프로그램이 없이 개발자들이 수동으로 코드를 합치고 배포한다면 개발자들의 작은 커뮤니케이션 오류 또는 테스트 코드의 부재가 나중에 큰 문제를 일으킬 수 있다. -> 예를 들어, Dev 서버를 로컬로 불러왔을 때, 동작이 안되는 경우 등을 방지 따라서, 여러명의 개발자가 동시에 개발을 하는 환경 속에서 CI/CD 시스템으로 코드를 합치고 배포하는 과정에 안정성을 부여할 수 있다. CI - 원리 : 코드를 Git등에 Commit하는 과정으로 Jenkins등의 CI 툴은 빌드와 테스트를 진행해 문제 발생시 Com..
Programmers - 기둥 과 보 설치 with JAVA 로직 1. 설치 연산시 -> 우선 설치 후, 모든 구조물이 괜찮은지 확인 -> 괜찮지 않다면 삭제 2. 삭제 연산시 -> 우선 삭제 후, 모든 구조물이 괜찮은지 확인 -> 괜찮지 않다면 설치 모든 구조물이 괜찮은가? 1. 기둥 : 땅 위에 있거나 보 위에 있거나 기둥 위에 있으면 괜찮다. 2. 보 : 기둥 위에 있거나 양쪽으로 보가 연결되어 있으면 괜찮다. 코드 import java.util.*; class Solution { public List solution(int n, int[][] build_frame) { List answer = new ArrayList(); for(int[] frame : build_frame){ int x = frame[0]; int y = frame[1]; int stu..