목록분류 전체보기 (48)
우주에서 글을 적어본다

[오늘의 학습 키워드 및 문제]- 프로그래머스의 "문자열 내 마대로 정렬하기" 문제를 풀었다.- 문제를 읽고 lambda를 이용한 정렬이 바로 떠올랐다. 문제에도 이미 정렬하기라고 명시돼 있기도 하다.[나의 코드]1차 시도def solution(strings, n): return sorted(strings, key=lambda x: x[n])2차 시도def solution(strings, n): answer = [] result = [] for i in range(len(strings)): answer.append((strings[i][n], strings[i])) answer.sort(key=lambda x : (x[0], x[1])) for ..

[오늘의 학습 키워드 및 문제]- 프로그래머스에서 "x만큼 간격이 있는 n개의 숫자" 문제를 풀었다. - 배열을 다루는 문제였고, 어렵지 않게 금방 풀 수 있었다.[나의 코드]def solution(x, n): answer = [] for i in range(1, n + 1): answer.append(i * x) return answer 예를 들어 x = 2, n = 5일 때 answer가 [2, 4, 6, 8, 10]이 되어야 한다.여기서 [2 x 1, 2 x 2, 2 x 3, 2 x 4, 2 x 5] 이런 식으로 규칙을 빠르게 찾을 수 있기 때문에 쉽게 풀 수 있었다. 물론 쉬운 문제이기도 하다.[오늘의 회고] - 어렵지 않은 문제였다. 다른 사람들의 풀이를 보니 한 줄..

[오늘의 학습 키워드]- 프로그래머스에서 "숫자 카드 나누기" 문제를 풀었다.- 문제를 읽고 최대공약수와 유클리드 호제법이 떠올랐다. 마침 최근에 유클리드 호제법을 공부했던 터였다.[나의 코드]def gcd(a, b): if a % b == 0: return b return gcd(b, a % b)def check_divided(array, gcd): for n in array: if n % gcd == 0: return False return Truedef solution(arrayA, arrayB): answer = 0 gcdA = arrayA[0] gcdB = arrayB[0] for n in arrayA..

오늘 학습 키워드 및 문제프로그래머스 "n^2 배열 자르기" 문제를 풀었다.키워드는 "2차원 배열을 1차원 배열로 변환"다음과 같이 배열에 숫자를 집어넣어야 한다. 파이썬 코드def solution(n, left, right): answer = [] for i in range(left, right + 1): row = i // n col = i % n answer.append(max(row, col) + 1) return answer(0, 0)(0, 1)(0, 2)(1, 0)(1, 1)(1, 2)(2, 0)(2, 1)(2, 2)n = 3일 때, 나오는 배열의 (i, j)을 준비한다.행과 열 가운데 더 큰 값에 +1을 해주면..
프로젝트에서 수정과 삭제 구현 중 쿼리를 옳바르게 작성했는데 오류가 떴었다. 찾아보니 수정과 삭제를 할 때는 @Transactional과 @Modifying를 붙여야 한다. @Transactional @Modifying @Query("delete from Likes l where l.poll.id=:pollId and l.member.id=:memberId") void deleteLike(@Param("pollId") Long pollId, @Param("memberId") Long memberId); 근데 굳이 저렇게 쿼리를 작성하지 않아도 된다는 것을 중간에 깨달았다. 이런 식으로 작성해도 되는 것이었다. JPA는 생각보다도 훨씬 편리한 기능을 "많이" 제공하고 있음을 깨달았다. @Transactio..
현재 진행 중인 프로젝트 구현을 완료하였다. 이번에 처음으로 JPA를 이용하여 개발을 진행해서 궁금했던 것들을 기록&복습용으로 블로그에 정리해 나가도록 하겠다. 테이블을 조인할 때 fetch를 사용하는데 우선 fetch의 의미는 "가지고 오다(to go to another place to get something or someone)"라는 의미다. 즉 테이블을 조회할 때 사용한다. JPA에서는 테이블을 언제 조회할 것인가에 대한 시점을 2가지를 지원한다. 그 내용을 간략히 아래에 적어 보았다. 즉시 로딩 엔티티를 조회할 때 연관된 엔티티도 함께 조회함 예) @ManyToOne(fetch = FetchType.EAGER) → 즉시 로딩 최적화를 위해 가능하면 조인 쿼리를 사용 지연 로딩 연관된 엔티티를 실..
스프링부트로 프로젝트를 진행하는 던 중 리스트를 처리할 때 Stream을 사용하는 것을 많이 보았다. 학교에서는 iterator만 배워서 잘 몰랐는데 이번 기회에 공부해 보려고 한다. 양이 많아서 여기에 정리는 간단하게 할 것이고 그 외는 아래 주소에서 확인하면 된다. https://futurecreator.github.io/2018/08/26/java-8-streams/ Stream Java 8부터 지원하기 시작함 elements를 하나씩 순회하며 처리함 람다식을 사용하여 간결하게 작성 가능 검색해 본 결과 스트림의 가장 큰 특징은 위의 세 개이다. 사용법 스트림 객체 생성 중간작업 - 가공하기 최종작업 - 결과 만들기 1. 스트림 객체 생성 배열, 컬렉션, 비어있는 스트림 등을 생성할 수 있다. 2...
프로젝트를 진행 중에 Poll 엔티티와 Choice 엔티티의 저장에서 오류가 발생했다. 문제 상황) 1. Poll은 Choice를 OneToMany로 연결 2. Choice는 Poll을 ManyToOne으로 연결 문제는 바로 순환 참조였다. 순환 참조는 아래를 의미한다. JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여 StackOverflowError 를 발생시키는 현상 검색해 보니 다양한 해결방법이 있지만 간단하게 애노테이션을 사용하여 해결하였다. 바로 @JsonManagedReference 과 @JsonBackReference 를 사용하면 된다. 연관관계의 주인 엔티티의 반대에 Managed를 사용해서 직렬화를 수행하고 연관관계의 주인 ..