본문 바로가기

전체 글345

[리팩토링] Optional과 orElseGet 그리고 함수형 인터페이스 다음과 같은 코드가 있었다. private User getUser(OAuthAttributes attributes, PlatformType platformType){ User findUser = userRepository.findByUserPlatformAndUserSocialId(platformType, attributes.getOauth2UserInfo().getId()).orElse(null); if(findUser == null){ return saveUser(attributes, platformType); } return findUser; } userRepository의 메서드는 Optional 타입이었다. public interface UserRepository extends JpaReposi.. 2023. 8. 16.
백준 5052 전화번호 목록 파이썬 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 모든 문자열 비교를 해야 하나.. 그치만 시간초과가 날텐데... 하면서 고민했다. 그런데 정렬을 하게 되면 접두사가 같은 것끼리 뭉치게 된다. 이렇게 되면 n*n이 아니라 n번의 비교로 끝낼 수 있다. "정렬"을 잘 활용하자 import sys def solve(n, arr): for i in range(n - 1): l = min(len(arr[i - 1]), len(ar.. 2023. 8. 11.
백준 12886 돌그룹 파이썬 https://www.acmicpc.net/problem/12886 12886번: 돌 그룹 오늘 강호는 돌을 이용해 재미있는 게임을 하려고 한다. 먼저, 돌은 세 개의 그룹으로 나누어져 있으며 각각의 그룹에는 돌이 A, B, C개가 있다. 강호는 모든 그룹에 있는 돌의 개수를 같게 만들려 www.acmicpc.net 세 그룹이 같은 돌 개수를 가져야 한다. -> 전체 돌 개수가 3의 배수가 아니라면 불가능하다. (a, b, c) == (a, c, b) == (b, a, c) == (b, c, a) == (c, a, b) == (c, b, a) -> 순서는 상관없다. visited[a][b] : (a, b, total - a - b) 방문했다 표시 아래 코드와 같이 (a,b,c)의 경우, 추가적으로 6가지.. 2023. 8. 11.
백준 1577 도로의 개수 파이썬 https://www.acmicpc.net/problem/1577 1577번: 도로의 개수 첫째 줄에 도로의 가로 크기 N과 세로 크기 M이 주어진다. N과 M은 100보다 작거나 같은 자연수이고, 둘째 줄에는 공사중인 도로의 개수 K가 주어진다. K는 0보다 크거나 같고, 50보다 작거나 같은 자 www.acmicpc.net 처음에는 중학생 때인가 배웠던 것처럼 대각선으로 올라가면서 구해야 하기 때문에 그대로 구현해야 한다고 생각했다. 그런데 N*M이기 때문에 행렬이 ㅁ자라고 생각했을 때 ㄴ자로 시작하여 대각선으로 올라가면서 구했다. import sys N, M = map(int, sys.stdin.readline().split()) K = int(sys.stdin.readline()) working .. 2023. 8. 11.
백준 2157 여행 파이썬 dp풀이 https://www.acmicpc.net/problem/2157 2157번: 여행 첫째 줄에 N(1 ≤ N ≤ 300), M(2 ≤ M ≤ N), K(1 ≤ K ≤ 100,000)가 주어진다. K는 개설된 항공로의 개수이다. 다음 K개의 줄에는 각 항공로에 대한 정보를 나타내는 세 정수 a, b, c(1 ≤ a, b ≤ N, 1 ≤ c ≤ 1 www.acmicpc.net 기존에 풀지 못하고 dfs + dp 조합 해설을 확인했었다. import sys N, M, K = map(int, sys.stdin.readline().split()) # N: 1-N까지의 도시가 있다. # M: M개 이하의 도시를 지나는 여행을 계획 중이다 # K: 항로 개수 INF = -sys.maxsize def solution(.. 2023. 8. 10.
JPA 프록시 개념/존재이유와 find(), getReferenceById() 프로젝트를 하면서 연관관계가 있는 데이터를 삽입해야 할 때 getReferenceById를 쓴다. DB에는 bookmark(bm_id, u_id, r_id)로 되어있는데, 스프링에서는 객체 타입이기 때문에 데이터를 삽입할 때 다음과 같이 했다. @Entity @Table(name = "bookmark") @Getter public class ReviewBookmark { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "bm_id") private Long bookmarkId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "u_id") private User user; @Ma.. 2023. 8. 8.