전체 글 790

[Lv.3 / 프로그래머스 / SQL] 대장균의 크기에 따라 분류하기 1

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 각 구간 조건에 따라 Case 문으로 분류하여 SIZE를 달리 표현할 수 있다. SELECT ID, CASE WHEN SIZE_OF_COLONY > 1000 THEN "HIGH" WHEN SIZE_OF_COLONY > 100 THEN "MEDIUM" ELSE "LOW" END AS SIZE FROM ECOLI_DATA ORDER BY ID

[Effective Java : Item 83] 지연 초기화는 신중히 사용하라

지연 초기화(lazy initialization) 지연 초기화란?- 필드의 값이 처음 필요할 때까지 초기화를 늦추는 기법- 정적 필드와 인스턴스 필드 모두 사용 가능- 주로 최적화 용도로 사용, 초기화 시 발생하는 위험한 순환 문제를 해결하는 효과도 존재 지연 초기화의 양면성지연 초기화는 무조건 좋은 것이 아니라 경우에 따라 다른 양면성이 존재한다. - 클래스 혹은 인스턴스 생성 시의 초기화 비용 감소- 반면 지연 초기화하는 필드에 접근하는 비용은 증가- 필드를 초기화하는 비용, 횟수 등에 따라 지연 초기화 시 오히려 성능이 감소하는 경우도 있다. 즉, 인스턴스가 해당 필드를 잘 사용하지 않지만, 초기화 비용이 큰 경우에는 지연 초기화 도입을 고려할 필요성이 있다. 또한 멀티스레드 환경에서는 지연 초기화..

Dev/Java 2024.04.09

[Lv.3 / 프로그래머스 / SQL] 대장균들의 자식의 수 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 PARENT_ID가 자신의 ID와 일치하는 행의 개수를 세 CHILD_COUNT 컬럼과 함께 출력해야 한다. 자식이 없어서 Null로 나타난 경우, IFNULL 구문 등을 사용하여 0으로 대체하여 출력해야 한다. SELECT ID, IFNULL( ( SELECT COUNT(*) FROM ECOLI_DATA GROUP BY PARENT_ID HAVING PARENT_ID = ID ), 0 ) AS CHILD_COUNT FROM ECOLI_DATA ORDER BY ID

[Effective Java : Item 77] 예외를 무시하지 말라

개요 검사 예외 및 비검사 예외에 동일하게 적용되는 원칙이다. 아주 자명한 사실이지만, 사람들이 자주 어기고 있는 원칙 중 하나라고 한다. API 설계자가 메서드 선언에 예외를 명시하는 이유는, 그 메서드를 사용할 때 발생할 수 있는 문제에 대해 적절한 조치를 취해달라고 말하는 것이다. 다음의 코드와 같이 예외를 무시하는 방법은 아주 간단하다. try-catch 문으로 코드를 묶고, catch에 아무런 조치를 하지 않으면 된다. try { ... } catch (SomeException e) { } 문제 상황에 잘 대처하기 위해 예외가 존재하는데, 위처럼 catch 블록을 비워두면 예외가 존재할 이유가 없어진다. 예외를 무시해도 되는 경우 예외를 무시해도 괜찮을 경우도 있다. 예를 들어, FileInpu..

Dev/Java 2024.04.01

[Effective Java : Item 69] 예외는 진짜 예외 상황에만 사용하라

개요 try { int i = 0; while(true) range[i++].climb(); } catch (ArrayIndexOutOfBoundsException e) { } 위의 코드는 배열의 원소를 끔찍한 방식으로 순회하고 있는 코드이다. 무한루프를 돌며 순회하다가, 배열의 끝에 도달해 ArrayIndexOutOfBoundsException이 발생하면 끝을 내는 방식이다. 전혀 직관적이지 않다는 사실 하나만으로도 코드를 이렇게 작성하면 안 된다는 이유가 충분하다. 아래는 일반적인 관용구를 사용하여 작성한 방법이다. for (Mountain m : range) m.climb(); 왜 예외를 사용하는 방식으로 반복문을 종료하도록 하였을까? 저자는 아마도 잘못된 추론을 근거로 성능을 높여보려 시도한 흔적..

Dev/Java 2024.03.29

[Lv.1 / 프로그래머스 / 파이썬] 가장 많이 받은 선물 (2024 KAKAO WINTER INTERNSHIP)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 딕셔너리를 이용하여 주고받은 선물의 히스토리를 기록한다. 나중에 선물 지수를 계산할 때 필요하므로 자신이 선물을 몇 개 받았는지 기록하는 received 딕셔너리도 함께 기록해준다. 이후 친구 목록을 순회하며 두 사람의 선물 기록 및 선물 지수를 바탕으로 선물을 받을 개수를 계산하고 반환한다. def solution(friends, gifts): # 선물 기록을 저장할 딕셔너리 생성 history = dict() # 2depth, a = {b: 1}; a가 b에게 1개 줌 received = dict()..

[Lv.2 / 프로그래머스 / SQL] 업그레이드 된 아이템 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 a 아이템의 parent_item 이 null이 아닌 b 인 경우, b의 Rarity가 RARE인 것을 출력하면 된다. 서브쿼리를 활용하여 해결했다. SELECT INFO.ITEM_ID, INFO.ITEM_NAME, INFO.RARITY FROM ITEM_INFO AS INFO, ITEM_TREE AS TREE WHERE INFO.ITEM_ID = TREE.ITEM_ID AND (SELECT DISTINCT RARITY FROM ITEM_INFO AS INFO2, ITEM_TREE AS TREE2 WHE..

[Effective Java : Item 60] 정확한 답이 필요하다면 float와 double은 피하라

개요 float와 double은 부동소수점 숫자를 표현되는 데 사용되는 데이터 형식으로, 넓은 범위의 수를 '근사치'로 빠르게 계산할 수 있다. 부동 소수점 형식은 유한한 비트 수로 실수를 표현하는데, 이로 인해 정밀도 손실이 발생하기 때문이다. 따라서 아주 정확한 계산이 필요한 금융 관련 계산에는 절대 사용하면 안 된다. 다음의 예제를 살펴보자. System.out.println("1.03 - 0.42 = " + (1.03 - 0.42)); 1.03 달러에서 42센트를 사용한 예제이다. 이를 실행하면 다음과 같은 결과를 얻는다. 기대한 값인 0.61이 아닌 0.6100000000000001 을 출력한다. 심지어 특수한 사례도 아니다. 좀 더 구체적인 사례로 살펴보자. double funds = 1.00..

Dev/Java 2024.03.21

[Effective Java : Item 59] 라이브러리를 익히고 사용하라

개요 static Random rnd = new Random(); static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 위 코드는 0부터 n보다 작은 정수 중 하나를 출력하는 간단한 메서드이다. 괜찮은 듯 보이지만 세 가지 문제점을 내포하고 있다. 1. n이 그리 크지 않은 2의 제곱수라면 같은 수열이 반복된다. 2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. n값이 크면 현상이 더 두드러진다. 3. 지정한 범위 바깥의 수가 종종 튀어나올 수 있다. rnd.nextInt()는 Integer.MIN_VALUE 를 반환할 수 있는데, 이를 Math.abs()로 절대값으로 반환하고자 하면 오버플로우가 발생하기 때문이다...

Dev/Java 2024.03.20

[Lv.2 / 프로그래머스 / SQL] ROOT 아이템 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 PARENT_ITEM_ID 가 Null인 항목을 출력해야 한다. IS NULL 구문을 통해 현재 필드의 null 여부를 반환받을 수 있다. SELECT INFO.ITEM_ID, INFO.ITEM_NAME FROM ITEM_INFO AS INFO, ITEM_TREE AS TREE WHERE INFO.ITEM_ID = TREE.ITEM_ID AND TREE.PARENT_ITEM_ID IS NULL

반응형