
학원에 다니면서 중간중간 풀어보려 도전했지만,, 아주 쉬운 문제도 전혀 감이 잡히지 않아 계속 '나중에, 나중에..'하며 미루다 보니 시간이 많이 흘렀다. 이제라도 매일 1~2문제씩 풀어보자\~~!BufferedReader와 Scanner는 자바에서 사용되는 두 가지

\[1,2,3,4] 의 길이는 4이고 인덱스의 길이는 3인데 <= 를 해버려서 4까지 접근하려다 보니 에러가 났던 것.찾아보니 이렇게 간단히 풀수도 있었다. /와 %를 잘 생각해서 쓰자.이렇게 나누기2를 해서 for문을 돌 때 반만 돌도록 하는 효율적인 방법도 있

문제1 - 중복 제거하기 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다. 정답 count(*): 전체행 숫자 계산일때는 null을 포함한다. 하지만

문제1 -이름에 el들어가는 동물 찾기 정답 LIKE 연산자 : 컬럼에 저장된 문자열 중에서 LIKE 연산자에서 지정한 문자 패턴과 부분적으로 일치하면 참이 되는 연산자 부분 문자열 검색에 사용되는 패턴 % : 임의의 길이의 문자열% 모든 문자 (글자수제한이없음

Lv.1 - 나머지가 1이 되는 수 찾기 IntSummaryStatistics IntSummaryStatistics 객체는 최소값, 최대값, 합계, 평균 등 여러 통계 정보를 제공한다.

문제를 보고 위와 같이 작성했지만 문제가 풀리지 않았다. 문제풀이를 살펴보다 보니 > 조건이 중의적으로 보일수도 있었나봅니다! 해당 기간에 작성된 댓글이 아니라 게시글이라고 합니다. 라는 글을 발견하고 부분을 빼니 통과했다. 정답 느낀점 프로젝트를 진행하며

정답 SQL에서 IFNULL 함수는 컬럼 값이 NULL 인 경우 정해진 값으로 대체할 때 사용한다. column_name : 검사할 컬럼 값 replacement_value : 검사할 컬럼값이 NULL인 경우 대체할 값 table_name : 조회할 테이블명

나는 아스키코드에서 대소문자의 사이값을 계산해서 문제를 풀었다. 문제를 푼후 다른 사람 풀이를 보니 toUpperCase()와 toLowerCase()로 간단하게 작성할 수 있다는걸 알았다. 이 외에도 사람들의 코드를 보면 내가 생각지 못한 좋은 코드들이 많았다

문제1- 조건에 맞는 도서 리스트 출력하기 정답 앞에서 풀어왔던 문제와 비슷하여 따로 풀이는 x 문제2 -과일로 만든 아이스크림 고르기 정답 On절 ON 절은 SQL의 JOIN 연산에서 사용하는것. JOIN 은

풀이 1. 시작일이 9월에 속한값 조회 DATE_FORMAT을 사용하여 원하는 날짜 조회. 2. 주의사항 - 데이트 포맷과 동일하게 출력 
문제1 for를 사용한다면 array[i] 형식으로 사용 foreach를 사용하면 i 그대로 사용하여 비교 문제2 - 피자 나눠먹기 문제3 - MySQL(INNER JOIN / LEFT JOIN) LEFT JOIN 은 왼쪽 테이블(ANIMALINS)의 모든 행을 반환하고, 오른쪽 테이블(ANIMALOUTS)과 일치하는 행이 있으면 해당 정보를 함께...

문제1 - 오랜 기간 보호한 동물(2) datediff를 사용하여 날짜의 사이값을 구했다. 기본적으로 날짜1 - 날짜2 로 계산된다. 정렬 조건으로도 사용 할 수 있다~! 문제2 - 조건에 맞는 사용자와 총 거래금액 조회하기 70만원 조건을 넣지 않고 이렇게

문제1 - 없어진 기록 찾기 풀이1 풀이2 USING 구문 사용 USING(ANIMALID) 구문은 JOIN 조건에서 두 테이블(ANIMALOUTS와 ANIMALINS)이 같은 이름의 컬럼(ANIMALID)을 가지고 있을 때 사용할 수 있다. 이 구문은 ON 구문과 같은 역할을 하지만, ON A.ANIMALID = O.ANIMALID 와 같이 명...

문제1 - 특정 문자 제거하기 풀이1 String 클래스의 replace()메서드를 사용하여 더 간단하게 문제를 해결할 수 있다. 풀이2 replace replace() 메서드는 지정된 문자(또는 문자열)를 다른 문자(또는 문자열)로 대체한다. letter를

문제1 - 세균증식 비트 연산으로 풀기 비트 연산 비트 연산은 데이터의 비트(bit) 단위로 직접 조작하는 연산을 말한다. 여기에서는 특히 왼쪽 시프트 연산자 << 를 사용하여 문제를 풀 수 있다. 왼쪽 시프트 연산자는 피연산자의 비트를 왼쪽으로 이동시키며, 매 이동마다 2를 곱하는 효과가 있다. 즉, a << b 는 a를 2의 b 제곱만큼 곱한 값 ...

처음 풀 때 코드새롭게 풀어본 코드처음 풀 때는 접근 자체를 어떻게 하는지 모르겠어서 이것 저것 찾아보다가 BufferdeReader를 사용해 봤다.오랜만에 다시 풀어보려고 들어와보니 다른 방법으로 풀 수 있을 것 같아 적용해보았다.나는 이렇게 풀었지만 아스키코드를 이

중복 조건 제거삼항 연산자 (?:) 를 사용하여 조건문을 간결하게 표현.x와 y의 부호를 기준으로 분기하는 동일안 패턴 축약.가독성 향상quadrant 라는 변수에 결과값을 저장함으로써 코드의 의미를 명확히 함.불필요한 조건 제거 0 <= H && H <=

처음에는 출력을 한번에 나오게 하라는 건가 싶었는데 '각 테스트 케이스마다 A +B를 출력한다.' 라고 나와있어서 제출해보니 이렇게 나오는게 맞는 문제였다. BufferedReader는 Java에서 텍스트를 입력하거나 파일을 읽을 때 사용하는 클래스다. 일반적으로 효율

처음에는 for문 안에 for문 안에 또 for문으로 해야하나 싶었는데 병렬로 for문을 해야 했다.오류앞서 풀었던 문제와 같이 입력 받는 수가 있다고 생각했다.처음에는 0 0 이 나와도 답이 없이 끝내란느거라 생각해서 풀었으나 오답.마지막 출력에 0 0 이 나오게 하

중간에 이렇게 첫번째 값으로 초기화 해야겠다 싶어 초기화 방법을 바꿨다.max 값은 잘 들어가는데 min 값은 어떻게 초기화 해줘야할지 모르겠어서 여기 저기 넣어봤다.어느정도 고민을 해봐도 답이 안나와 찾아보니 아래와 같이 초기화 하신분이 있었다.정답 코드로 돌리면 맞

5597 3052 10811

StringIndexOutOfBoundsException: String index out of range: 0 라는 오류가 발생했다.이는 문자열이 비어있을 때 ("") charAt(0) 또는 charAt(str.length(-1)을 호출해서 발생할 수 있는 문제다.Sc

11720 sc.next() → 공백 없이 숫자를 문자열로 입력받음. 반복문(for) → 문자열 길이만큼 반복하여 한 자리씩 접근. charAt(i) - '0'→ 문자(char)를 정수(int)로 변환 ('5' - '0' → 5). 누적 합(sum +=) → 각 숫자

업로드중..출력되는 결과는 똑같지만 첫 번재 코드는 테스트에 실패하고 두 번째 코드로 성공할 수 있었다.그 이유는 YEAR(YM) AS YEAR 와 DATE_FORMAT(YM, '%Y') AS YEAR의 차이점은 반환되는 데이터 타입과 MySQL의 GROUP BY 처리

가장 큰 두 수의 곱 vs 가장 작은 두 수의 곱(음수 고려)정렬 후, 최댓값을 빠르게 찾을 수 있다. \- 양수의 경우 → 가장 큰 두 수의 곱 \- 음수의 경우 → 가장 작은 두 수(음수 두 개)의 곱 \- 두 경우 중 더 큰 값을 선택.

1️⃣ my_string.chars() → 문자열을 IntStream으로 변환chars()는 문자열을 IntStream으로 변환하는 메서드.IntStream은 각 문자의 유니코드(ASCII) 값을 포함 한다.2️⃣ .mapToObj(c -> ...) → int 값을 C

StringBuilder는 mutable(변경 가능) 하기 때문에 setCharAt(index, char)를 사용하여 문자열의 특정 문자를 직접 변경 가능하다.1️⃣ my_string.split(""): 문자열을 리스트로 변환2️⃣ Collections.swap(lis

여기서 PRODUCT_NAME은 GROUP BY에도 없고,MAX(PRICE)랑도 직접적인 관련이 없어서 DB는 어떤 제품명을 보여줘야 할지 모르게 된다.GROUP BY 쓸 때는 집계되지 않은 필드(Product_Name)는 사용할 수 없다!\--정리❌ 틀린 이유GROU

Math.sqrt(n)으로 제곱근 구하고int로 형변환한 뒤 다시 제곱해서 n과 같으면 제곱수√n, 즉 n의 제곱근을 double 타입으로 반환

Math.sqrt(n)은 double이므로 정확하게 sqrt \* sqrt == n 으로 비교해주는 게 안전하다.Math.pow()를 쓰면 double 계산이 많아지고 부동소수점 오차가 생길 수 있어서 가능하면 안 쓰는게 좋다.문제에서 x가 양의 정수라고 했으니 (sq

stream

for (int i = 0; ...) x는 현재 반복 위치(index)를 나타내는 변수x를 직접 증가시키면서 index처럼 쓰는 것.for (String value : arr) + x++

장점:Java 8 이상 호환 가능비교적 직관적이고 버전 제약 없음단점: 문자 하나하나 append → 약간의 오버헤드phone_number.length(): 전체 길이substring(length - 4) : 뒤에서 4자리만 추출"\*".repeat(length - 4

a부터 시작해서 b 직전까지의 문자열 반환

삼항 연산자

COUNT(\*) → 전체 행 개수COUNT(column_name → NULL이 아닌 값의 개수(전체 개수 - NULL이 아닌 개수) → NULL 개수CASE WHEN column_name IS NULL THEN 1 ELSE 0→ NULL이면 1, 아니면 0SUM()으

✔ LOWER(skill_X) = 'python' → 대소문자 무시하고 비교 (Python, PYTHON도 포함)✔ OR 조건 → skill_1, skill_2, skill_3 중 하나라도 Python이면 조회!ex)✔ OFFSET: 몇 번째부터 시작할지 결정

(a, b)가 n의 약수라면 (b, a)도 성립한다.즉, 약수의 개수 × 2를 반환하면 된다.약수를 찾을 때 1부터 n까지 다 검사하면 비효율적이다.√n까지만 탐색하면 빠르게 해결 가능하다.1️⃣ 1부터 √n까지만 탐색 (i \* i <= n)i가 n의 약수이면

✅ replaceAll("\[aeiou]", "")정규 표현식(Regex)을 사용하여 모음(aeiou)을 모두 ""(빈 문자열)로 치환\[] 안에 모음들을 넣어 모든 모음이 포함된 문자들을 제거✔ chars() → 문자열을 문자 스트림으로 변환✔ mapToObj(c

정렬 후 array.length / 2 번째 요소를 반환Arrays.sort() → O(n log n) (퀵정렬 기반)Arrays.stream(array).sorted() → 정렬된 스트림 생성toArray() → 다시 배열로 변환 후 중앙값 반환성능은 Arrays.s

index++; 을 넣어줘야 인덱스를 증가시켜야 배열의 값이 제대로 들어간다.IntStream은 Java 8에서 추가된 스트림 API 중 하나로, 정수 범위를 다룰 수 있다.rangeClosed(1, n) → 1부터 n까지 포함하는 연속된 숫자 스트림을 생성한다. \

낮은 수(100,000)가 위에 있으면 50만원 이상일 할인이 여러번 들어간다.더 간결하게 보인다.

repeat(int count):Java 11부터 지원되는 String 클래스의 메서드로, 특정 문자열을 count만큼 반복하여 반환한다.i=1부터 n까지 증가하면서, "\*".repeat(i)가 i번 반복된 문자열을 생성하고 출력.✅ Java 11 이상에서는 repe

substring(i, i+1) 대신 char 사용 → charAt(i) 또는 toCharArray()를 사용하여 더 직관적이고 성능이 향상된다.여기서는 HashMap의 키를 String 대신 Character 타입으로 변경하는 것이 더 효율적이다.for-each 사용

출력되는 결과는 똑같지만 첫 번재 코드는 테스트에 실패하고 두 번째 코드로 성공할 수 있었다.그 이유는 YEAR(YM) AS YEAR 와 DATE_FORMAT(YM, '%Y') AS YEAR의 차이점은 반환되는 데이터 타입과 MySQL의 GROUP BY 처리 방식에 있

처음에는 sum과 max를 사용해야겠다 싶어서 서브쿼리를 짜야한다고 생각했다. 서브쿼리를 짜보려 고민하다 보니 너무 복잡하고 뭔가 아닌 것 같은 생각이 들어서 다른 방법이 없을지 생각해봤다.점수를 높은 순으로 정렬한 후 하나의 값만 추출하니 서브쿼리를 사용하지 않아도

Arrays.stream(num_list)num_list(정수 배열)를 스트림(Stream) 으로 변환.즉, num_list 배열의 각 요소를 순차적으로 처리할 수 있는 스트림을 생성..reduce(1, (a, b) -> a \* b)reduce(초기값, 누적 연산)

숫자인지 확인하려면 ASCII 값을 비교해야 하는데, 직접 연산을 수행하므로 다소 비효율적이다.i - '0' < 10 → Character.isDigit(c) 사용하여 가독성 증가.int i 대신 char c 사용이 더 직관적이다.Character.isDigit(

2는 TOTAL_DISTANCE컬럼을 의미하지만, CONCAT()을 사용했기 때문에 문자열(String) 정렬이 적용된다.문자열 정렬은 숫자 정렬과 다르게 작동할 수 있어 정확한 답이 아니게 된다.SUM(D_BETWEEN_DIST)는 숫자 값이므로 정렬이 정확하게 적용

테스트 통과는 하지만 좋은 코드가 아닌 것 같아 개선MySQL 내장 함수 QUARTER()를 활용하여 분기를 자동으로 계산할 수 있다. \- 그러나 프로그래머스 에서는 아래와 같은 오류가 난다. ✔ 이 오류는 ONLY_FULL_GROUP_BY 모드가 활성화되어 있기

sum += x % 10 : 1의 자리 구하기x /= 10: 자리수 줄이기Math.negateExact() 사용\-1 곱하기🔥 예외 케이스 주의Integer.MIN_VALUE는 -2147483648인데, 양수로 바꾸면 오버플로우 나서 그대로 남아있다.이건 알고리즘 문

어차피 들어있지 않은 수를 찾아 더할거니까1~9의 합에서 있는 값을 빼준다.

요구사항을 잘 파악해야 한다.총매출(= 가격 × 수량)FP.PRODUCT_ID, FP.PRODUCT_NAME어떤 것으로 그룹을 정할지에 대해 잘 생각해보자.처음에는 한 코드에 하나의 이름이 부여된 거라 생각하고 결국 둘 다 같은걸 가리킨다고 여겨 FP.PRODUCT_N

정렬까지 꼼꼼히 잘 작성하자 ⭐️

마지막 조건에서 -1이 아니라 488이 나오는 문제 발생if (a % 2 == 0) 과 if (a % 2 != 0)이 둘 다 독립적인 if문으로 되어 있어서,짝수 조건에서 나누고 break가 걸리지 않으면, 바로 아래 홀수 조건도 다시 실행돼어버린다.예)a = 6→ 짝

▶ AVG(R.REVIEW_SCORE) = 집계 함수(aggregate function)→ 집계 함수는 여러 행을 그룹으로 묶어야 의미가 있다.예: 식당 A에 리뷰가 3개 → 평균을 내려면 그 3개를 그룹으로 묶어야 함따라서, 반드시 GROUP BY로 "어떤 기준으로

'저자별 + 카테고리별'로 그룹핑해야 하므로,반드시 GROUP BY AUTHOR_ID, CATEGORY 기반으로 묶어야 한다!

배열만 사용해서 성능은 빠름불필요한 컬렉션 사용 안 함 (메모리도 효율적)idx로 직접 answer\[]에 순서대로 넣기 때문에 안전하고 명확함

sum 변수가 int 타입이면 오버플로우가 발생예를 들어:price = 2,000, count = 2,500이면,총 요금은 price × (1 + 2 + ... + 2500) → = 2000 × (2500 × 2501 / 2)→ = 2000 × 3,126,250 = 6

비효율적: 시간 복잡도는 O(N²) 수준 (right가 커질수록 매우 느려짐)매번 약수를 모두 세야 함 → 특히 i가 클수록 반복 횟수가 많아짐제곱수인 경우 약수의 개수가 홀수이고 제곱수가 아닌 경우 약수의 개수가 짝수이다.어떤 수의 약수는 항상 (a, b)처럼 쌍을

'년, 월, 성별 별로 상품을 구매한 회원 수'를 세야함= 같은 회원이 한 달에 여러 번 구매했어도 → 중복 없이 1명으로 카운트돼야 함DISTINCT : DISTINCT로 먼저 중복 제거한 후 집계WHERE UI.GENDER IS NOT NULL 조건 정확하게 넣기

WHERE NAME IN (...)Milk, Yogurt 중 하나인 항목들만 필터링GROUP BY CART_ID 장바구니 ID별로 묶기HAVING COUNT(DISTINCT NAME) = 2 이름이 두 개(Milk, Yogurt) 모두 포함된 것만 남김동시에 존재하는

AVG(HG.SCORE) 사번별 평균을 계산GROUP BY 집계 기준(사번 + 이름 + 급여)을 명확히 해야 함CASE 안에서 AVG() 사용 단, GROUP BY 필수ORDER BY사번 기준 정렬

이런 식으로 변수로 길이를 추출해두면 더 깔끔하고 의도가 분명해진다.A를 오름차순, B를 내림차순처럼 처리하면서 곱셈 진행즉, A의 가장 작은 수 × B의 가장 큰 수, 다음 작은 수 × 다음 큰 수…곱의 총합을 최소화하는 방법으로 접근내 생각 흐름이 괜찮은 건지, 좀

처음에는 " " 기준으로 split() 해서 단어별로 처리하려 했지만,이 경우 공백이 여러 개일 때 손실이 생김 → JadenCase 조건과 다름그래서 문자 하나하나 순회하며 처리하는 방식으로 구현단어의 첫 글자인지 여부를 boolean 플래그로 추적