본문 바로가기

Development

(98)
[Spring] Spring JPA에서 null을 리턴 하지 않는 경우와 Optional 타입에 대하여 프로젝트를 진행하다가 JPA 메서드 리턴 타입에 Optional 래퍼 클래스를 씌운 적이 있는데, 이게 알고보니 JPA에서 null을 리턴하지 않는 메서드에다가도 적용을 했었던 의미 없는 변경을 한 적이 있습니다. 이 글에서는 Spring JPA에서 리턴 타입에 관해 작성해보고자 합니다. Optional Class Optional 은 Null이 아닌 값을 포함하거나 포함하지 않을 수 있는 컨테이너 객체를 나타내는 Java 클래스입니다. 값이 존재하는 경우 `isPresent()` 메서드는 `true`를 반환하며, `get()` 메서드는 해당 값을 반환합니다. 값의 존재 여부에 따라 의존하는 추가 메서드도 제공됩니다. 예를 들어, 값이 존재하지 않을 때 기본값을 반환하는 `orElse()` 메서드나 값이 ..
[완전탐색] 프로그래머스 level 2 소수 찾기 Python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 접근 일단 모든 만들 수 있는 숫자를 생성해야 함 -> 순열 소수 판별하는 함수를 만들어야함 Java로 구현하려 했으나.. 자바에서 순열을 연산해 주는 라이브러리가 없는 것 같아서 https://github.com/TheAlgorithms/Java/blob/c527dff92da2046b850ffe9a3b8d0c2aae15d588/src/main/java/com/..
[2022 KAKAO TECH INTERNSHIP] 두 큐 합 같게 만들기 Python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 접근 핵심은 총합이 큰 queue에서 작은 queue로 요소가 이동해야 함 반복문을 돌면서 한쪽 큐로 옮겨보고, 합해보고, 다시 비교해 보고 같아지거나 최대 카운트 벗어나면 break 시간 초과 시간 초과에 대해 고민을 했는데.. sum() 함수 연산을 최소화 (변수에 저장하고 연산하는 식으로) 최대 연산 수를, 하나의 queue가 싹 빠지고 다시 원래 queue로 돌아오는 경우라 생각해서..
[2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 Python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 접근 각 성격 유형 별로 score를 저장하는 자료구조가 필요할 듯 근데 default 값이 있어야 성격을 모두 출력 가능하니, defaultdict 사용 "RT"던 "TR"이던 신경 쓸 필요는 없어 보임 어차피 score에 따라 점수 부여가 달라지니깐 같은 점수일 경우 사전식으로 정렬하여 출력하면 되니 sort 후 점수 비교하여 answer에 추가 코드 import collections ..
[Hash] 프로그래머스 Level 2 전화번호 목록 Python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 접근 Sort를 하면 사전식으로 정렬을 하게 되는데, 이는 결국엔 문자열 길이 상관없이 앞 문자를 기준으로 정렬하게 된다. 결국 접두사가 되려면 앞 문자가 같아야 하므로 앞 문자가 같은 문자열끼리 정렬이 된다. 바로 앞 인덱스 문자끼리만 비교하면 되고, startswith 함수를 통해 비교 가능하다. 코드 def solution(phone_book): phone_book = sorted(ph..
[개발일기]Python은 멀티쓰레딩 언어인데 GIL은 왜멀티쓰레딩을 막도록 설계되었나요? 그리고 Python 3.12 Per-interpreter GIL 인턴 생활을 하면서 Python의 대해 공부를 좀 했었는데, Python은 멀티쓰레딩 언어임에도 GIL라는 장치는 마치 단일 쓰레딩만 가능하도록 설계가 되었다는 것을 알았습니다. 왜 멀티쓰레딩 언어임에도 이를 막고자 설계가 되었는지 시니어 개발자분께 여쭤본 기억이 있는데요, 마침 최근 Python 3.12에는 Interpreter improvements의 사항으로 PEP 684, a unique per-interpreter GIL 가 있더라구요! 이 글에서는 GIL과 per-interpreter GIL 에 대해 다루고자 합니다. GIL 파이썬은 메모리 관리를 위해 참조 계수(reference counting)를 사용합니다. 이는 파이썬에서 생성된 객체가 해당 객체를 가리키는 참조의 개수를 추적하는 참조 ..
[Hash] 프로그래머스 level 1 완주하지 못한 선수 python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 접근 Participant, completion을 HashMap 자료구조로 변환 후 '-' 연산을 하는 방식을 떠올렸으나. 적당한 key나 value 값을 못 골랐다. 찾아보다가 Counter를 사용하면 목적에 위 방식에 딱 맞는 자료구조로 변환이 가능해서 간단하게 구현이 가능하였다. Counter Python의 collections 라이브러리에는 데이터 컬렉션과 관련된 다양한 유용한 클래스..
[정렬] 프로그래머스 level 2 H-Index python 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 문제 접근 citations 각 요소들을 비교하면서 인용 횟수를 세야하나..? 그럼 이중 for문을 써야 하나..? 그래도 뭔가 이상한데.. 다시 문제 접근 1. 가장 인용횟수가 높은 논문 인덱스부터 정렬한 후 2. 0회 인용 횟수부터 시작해서 논문 하나씩 비교해 나가면서 +1 하다가 3. 인용 횟수보다 더 낮은 인용 횟수의 논문이 나오면 break 이런 식으로 간단히 풀 수 있었다.. 코드..