전체 글

바쁜 새벽(busymidnight)을 살아보고자 만든 블로그
문제 설명 ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다. 지금부터 당신은 한 팀의 팀원이 되어 게임을 진행하려고 합니다. 다음은 5 x 5 크기의 맵에, 당신의 캐릭터가 (행: 1, 열: 1) 위치에 있고, 상대 팀 진영은 (행: 5, 열: 5) 위치에 있는 경우의 예시입니다. 위 그림에서 검은색 부분은 벽으로 막혀있어 갈 수 없는 길이며, 흰색 부분은 갈 수 있는 길입니다. 캐릭터가 움직일 때는 동, 서, 남, 북 방향으로 한 칸씩 이동하며, 게임 맵을 벗어난 길은 갈 수 없습니다. 아래 예시는 캐릭터가 상대 팀 진영으로 가는 두 가지 방법을 나타내고 있습니다. 첫 번째 방법은 11..
문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력 예 tickets return [["ICN"..
문제 설명 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 100..
REST(Representational State Transfer) API 소프트웨어 프로그램 아키텍처의 한 형식 웹의 모든 자원에 고유한 ID인 HTTP URI 를 부여 Client Side를 정형화된 플랫폼이 아닌 모바일, PC, 어플리케이션 등 플랫폼에 제약을 두지 않는 것을 목표 HTTP URI를 통해 자원을 명시하고, HTTP Method (POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD OPERATION을 적용하는 것을 의미 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일 특징: a. 클라이언트 / 서버 구조 : 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역활이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동할 수 있게..
동적 쿼리와 성능 최적화 조회 Builder 사용 MemberTeamDto - 조회 최적화용 DTO 추가 @QueryProjection public MemberTeamDto(Long memberId, String username, int age, Long teamId, String teamName) { this.memberId = memberId; this.username = username; this.age = age; this.teamId = teamId; this.teamName = teamName; } @QueryProjection 을 추가 - QMemberTeamDto 를 생성하기 위해 ./gradlew compileQuerydsl 을 한번 실행 회원 검색 조건 @Data public class..
수정, 삭제 벌크 연산 벌크 연산 사용 후에는 영속성 컨텍스트를 초기화 시켜주는 게 좋다. 설명은 아래 주석 참고 쿼리 한번으로 대량 데이터 수정 가능 @Test public void bulkUpdate() { /** * member1 = 10 -> DB member1 * member2 = 20 -> DB member2 * member3 = 30 -> DB member3 * member4 = 40 -> DB member4 * */ long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); /** * member1 = 10 -> DB 비회원 * member2 = 20 ->..
동적 쿼리를 해결하는 두가지 방식 BooleanBuilder Where 다중 파라미터 사용 BooleanBuilder 초기값을 지정 할 수도 있음 @Test public void dynamicQuery_BooleanBuilder() throws Exception { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder bui..
프로젝션? entity전체를 가져오는 것이 아니라 select 대상 지정하여 원하는 값만 조회하는 것 프로젝션 대상이 하나 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 @Test public void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s=" + s); } } 튜플 조회 프로젝션 대상이 둘 이상일 때 사용 com.querydsl.core.Tuple @Test public void tupleProjection() { List r..
쁜새
(안)게으른 블로그