전체보기

    [프로그래머스] PCCP 기출 3번 / 충돌위험 찾기 (Java)

    [프로그래머스] PCCP 기출 3번 / 충돌위험 찾기 (Java)

    문제 - 충돌위험 찾기(Level 2)문제 설명 어떤 물류 센터는 로봇을 이용한 자동 운송 시스템을 운영합니다. 운송 시스템이 작동하는 규칙은 다음과 같습니다. 1. 물류 센터에는 (r, c)와 같이 2차원 좌표로 나타낼 수 있는 n개의 포인트가 존재합니다. 각 포인트는 1~n까지의 서로 다른 번호를 가집니다. 2. 로봇마다 정해진 운송 경로가 존재합니다. 운송 경로는 m개의 포인트로 구성되고 로봇은 첫 포인트에서 시작해 할당된 포인트를 순서대로 방문합니다. 3. 운송 시스템에 사용되는 로봇은 x대이고, 모든 로봇은 0초에 동시에 출발합니다. 로봇은 1초마다 r 좌표와 c 좌표 중 하나가 1만큼 감소하거나 증가한 좌표로 이동할 수 있습니다. 4. 다음 포인트로 이동할 때는 항상 최단 경로로 이동하며 최단..

    [프로그래머스] PCCP 기출 2번 / 퍼즐 게임 챌린지 (Java)

    문제 - 퍼즐 게임 챌린지(Level 2)문제 설명 당신은 순서대로 n개의 퍼즐을 제한 시간 내에 풀어야 하는 퍼즐 게임을 하고 있습니다. 각 퍼즐은 난이도와 소요 시간이 정해져 있습니다. 당신의 숙련도에 따라 퍼즐을 풀 때 틀리는 횟수가 바뀌게 됩니다. 현재 퍼즐의 난이도를 diff, 현재 퍼즐의 소요 시간을 time_cur, 이전 퍼즐의 소요 시간을 time_prev, 당신의 숙련도를 level이라 하면, 게임은 다음과 같이 진행됩니다.diff ≤ level이면 퍼즐을 틀리지 않고 time_cur만큼의 시간을 사용하여 해결합니다.diff > level이면, 퍼즐을 총 diff - level번 틀립니다. 퍼즐을 틀릴 때마다, time_cur만큼의 시간을 사용하며, 추가로 time_prev만큼의 시간을 ..

    @BeforeAll과 @Mock

    @BeforeAll과 @Mock

    최근 테스트를 학습하면서 기존에 진행했던 프로젝트에 테스트 코드를 작성하고 있었는데, 이 과정에서 @BeforeAll과 @Mock을 동시에 사용하며 문제가 발생했고, 이 문제가 왜 발생했는 지, 어떻게 해결했는 지를 중점으로 글을 작성하려고 한다!@BeforeAll테스트 코드를 작성하다 보면 테스트 수행 전에 초기 설정이 필요하거..

    스프링 트랜잭션

    목차 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 선언적 트랜잭션 🤔 스프링 트랜잭션 스프링은 트랜잭션 동기화, 트랜잭션 추상화, 선언적 트랜잭션을 지원한다 우리가 자주 사용하는 @Transactional 어노테이션이 바로 선언적 트랙잭션이다 트랜잭션 동기화 먼저 기존에는 트랜잭션 동기화가 어떻게 이루어졌고 어떤 문제점이 있었으며, 스프링은 어떻게 해결했는 지 살펴보자. 스프링 없이 트랜잭션을 동기화 하는 코드(jdbc 사용) public interface MemberRepository { Long save(Connection conn, Member member); Member findById(Connection conn, Long id); } public class MemberService { ....

    JVM Garbage Collection

    JVM Garbage Collection

    목차 1. JVM Garbage Collection 이란? 2. JVM Garbage Collection 동작 방법 3. JVM Garbage Collection 종류 JVM Garbage Collection 이란? 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다 C / C++ 언어는 가비지 컬렉션(Garbage Collection, 이하 GC)가 없어 프로그래머가 수동으로 메모리 할당과 해제를 일일히 해줘야 하지만 Java는 GC가 메모리 관리를 대행해주기 때문에 다음과 같은 장단점이 존재한다 장점 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있음 개발자 입..

    [스프링] Spring AOP

    목차 1. AOP란? 2. AOP 용어 3. Spring AOP 동작 과정 4. AOP 적용 예시 코드 🤔 AOP란? AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미한다 AOP는 핵심적인 비즈니스 로직으로부터 횡단 관심사 를 분리하는 것에 목적을 둔다 횡단 관심사: 애플리케이션에서 코드가 중복되고, 강력하게 결합되어 있어 다른 로직과 분리할 수 없는 애플리케이션 로직 ex) 로깅, 트랜잭션, 예외 처리, 보안 등 횡단 관심사 코드 예시 카트에 물건을 담는 메서드에 실행 시간을 측정하는 부가 기능 추가 만약 이 메서드 뿐 만 아니라 모든 메서드에 실행 시간을 측정하는 기능을 추가해야 된다면 코드가 중복되고, 강력하게 결합되는 문제가 발생 AOP를 이용하여 부..

    [스프링] 1 + N

    [스프링] 1 + N

    목차 1. 1+N이란? 2. 즉시로딩과 지연로딩 3. 1+N이 발생하는 케이스 4. 1+N의 해결방안 🤔 1 + N 이란? 연관관계가 설정된 엔티티 사이에서 한 엔티티(1)를 조회하였을 때, 조회된 엔티티의 개수(N)만큼 연관된 엔티티를 조회하기 위해 추가적인 쿼리가 발생하는 문제이다 예를 들어 게시글(1) 과 댓글(N) 이 있을 때, 게시글과 댓글이 조인된 형태로 함께 조회되기를 기대했지만, 게시글을 조회(1)하는 쿼리와 댓글을 조회(N)하는 쿼리가 따로 날아가며 총 1+N 번 쿼리가 발생 DBMS에서 직접 쿼리를 작성하면 발생하지 않을 문제지만, JPA와 같은 ORM이 등장하고, 쿼리가 자동화 되면서 발생되는 문제이다 즉시로딩 과 지연로딩 에 대한 개념을 먼저 설명하고, 간단한 예제를 통해 1 + N..

    [소프티어] 함께하는 효도 (자바)

    문제 - 함께하는 효도(★★★☆☆) Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 풀이한 방법 - DFS를 이용해 각 친구마다 갈 수 있는 모든 경로를 구한다. - 모든 친구의 경로 조합을 구하고, 이를 이용하여 최대 열매 수확량을 구한다. 처음 문제를 봤을 때 간단한 DFS 문제인 줄 알고 각 친구 마다 열매 수확량의 최대 값을 구하고 이 값을 다 더하는 방식으로 구현하였는데, 풀고 보니 각 친구의 최대 값이 모든 친구의 수확량이 최대가 되는 값이 되지는 않다는 걸 깨달았다. 그래서 모든 경로를 탐색하고 그 중 최대 값을 반환하도록 코드를 수정했다. 코드 import java.io.*; import java.util.*; public class Main { public stati..