일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 래퍼타입
- 스프링뼈대
- islowercase()
- Git사용법
- StringBuilder
- 최대공약수와 최소공배수
- while과 two-pointer
- 베주계수
- 최소공배수
- git 컨벤션
- 스프링
- string
- ineer join
- 자바 유클리드
- 모던자바
- 최대공약수
- 스프링환경설정
- replaceAll()
- sql 데이터형 변환
- 자바 최대공약수
- toLowerCase()
- addDoc
- 동일성과 동등성
- isuppercase()
- 자바 최소공배수
- 자바 스트링
- 유클리드호제법
- stringbuilder의 reverse()
- string과 stringbuilder
- 프로그래머스 레벨1
- Today
- Total
주노 님의 블로그
20240710 사전캠프 8일차 TIL 본문
사전캠프 8일차 내용 간단요약
- 14:00 ~ 14:10 : 어제 TIL 복습
- 14:10 ~ 15:00 : 알고리즘 (28~32)
Stirng과 StringBuilder의 차이 - 15:00 ~ 16:00 : 데일리 과제
5주차 화요일 : SQL 연습문제 6번
5주차 수요일 : SQL 연습문제 7번 - 16:00 ~ 17:30 : 강의 (엑셀보다 쉽고 빠른 SQL) : 4주차
- 17:30 ~ 17:50 : TIL정리
- 17:50 ~ 18:00 : 매니저님 상담
알고리즘 28~32
문제 설명
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
class Solution {
public String solution(int n) {
String answer = "";
for(int i = 1; i<=n; i++) {
if (i % 2 != 0)
answer += "수";
else answer +="박";
}
return answer;
}
}
아무 생각없이 위 코드로 작성했는데
시간이 엄청 불어나는것임
문자열은 불변객체기때문에 더할때마다 새로운 문자열 객체가 생성됨.
즉 주소를 1로 가리키고 있던 "수" 가 +연산으로 박이 붙여진다면
원래의 "수" 가 있던 주소는 그대로, "수박"이라는 문자열은 생성되어 2번 주소가 된다는뜻이고
answer은 1에서 2를 가리키게 된다.
스트링빌더 사용
class Solution {
public String solution(int n) {
StringBuilder result = new StringBuilder();
String answer = "";
for(int i = 1; i<=n; i++) {
if (i % 2 != 0)
result.append("수");
else result.append("박");
}
answer=result.toString();
return answer;
}
}
stringBuilder은 가변 문자열 객체로 문자열을 더하거나 빼도 기존 배열을 변경한다
고로 추가하든, 삭제하든 똑같은 주소를 가르키며, 새로운 객체의 생성은 없기때문에 빠르다.
n==10000 기준으로 두 연산을 비교했을때.
물론 1초 미만이라 모르겠지만
65배 정도 빠른것을 계산할 수 있다.
데일리 과제
21. lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
SELECT ROW_NUMBER() OVER (ORDER BY rating DESC) AS 순위, NAME, REGION, RATING
FROM lol_users;
SELECT rank() OVER (ORDER BY rating DESC) AS 순위, NAME, REGION, RATING
FROM lol_users;
22. lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
SELECT name
FROM lol_users
ORDER BY JOIN_DATE DESC
LIMIT 1
23. lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
SELECT *
FROM lol_users
ORDER BY region, RATING DESC
24. lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
SELECT REGION 지역, AVG(rating) 평균점수
FROM lol_users
GROUP BY REGION;
25. lol_feedbacks 테이블에서 만족도 점수(satisfaction_score)에 따라 피드백을 내림차순으로 정렬하는 쿼리를 작성해주세요!
SELECT *
FROM LOL_FEEDBACKS
ORDER BY SATISFACTION_SCORE DESC
26. lol_feedbacks 테이블에서 각 유저별로 최신 피드백을 찾는 쿼리를 작성해주세요!
SELECT USER_NAME, MAX(FEEDBACK_DATE) AS 최신피드백
FROM LOL_FEEDBACKS
GROUP BY USER_NAME
27. lol_feedbacks 테이블에서 만족도 점수가 5점인 피드백의 수를 계산하는 쿼리를 작성해주세요!
SELECT COUNT(*) AS 피드백수
FROM lol_feedbacks
WHERE satisfaction_score = 5;
28. lol_feedbacks 테이블에서 가장 많은 피드백을 남긴 상위 3명의 고객을 찾는 쿼리를 작성해주세요!
SELECT USER_NAME, COUNT(USER_NAME) '피드백 수'
FROM LOL_FEEDBACKS
GROUP BY USER_NAME
order by COUNT(USER_NAME) DESC
LIMIT 3
29. lol_feedbacks 테이블에서 평균 만족도 점수가 가장 높은 날짜를 찾는 쿼리를 작성해주세요!
SELECT FEEDBACK_DATE, AVG(SATISFACTION_SCORE) 점수
FROM LOL_FEEDBACKS
GROUP BY FEEDBACK_DATE
ORDER BY 점수 DESC
LIMIT 1
강의 (엑셀보다 쉽고 빠른 SQL) - 4주차
- 서브쿼리
SQL쿼리 내에서 또 다른 SQL쿼리를 작성하여, 한번의 연산으로 끝나지 않을 연산을 수행함
복잡한 조건문 같은경우를 보다 깔끔하게 작성할 수 있음.select column1, special_column from ( /* subquery */ select column1, column2 special_column from table1 ) a
- IF문과 비교
음식주문시간이 25분보다 초과한 시간을 확인하는 쿼리문select order_id, restaurant_name, if(over_time>=0, over_time, 0) over_time from ( select order_id, restaurant_name, food_preparation_time-25 over_time from food_orders ) a
OVERTIME이 0보다 크면 OVERTIME을 아니면 0을
(음식준비시간 - 25 를 해주는 쿼리문)
IF문을 사용했을때if문으로만 썼을때 SELECT order_id, restaurant_name, IF(food_preparation_time - 25 >= 0, food_preparation_time - 25, 0) AS over_time FROM food_orders;
JOIN문
필요한 데이터가 서로 다른 컬럼에 있는 경우 가져오는 방법
SELECT *
FROM A JOIN B
LEFT(RIGHT) JOIN : 왼쪽(오른쪽) 테이블의 모든 내용과, 오른쪽(왼쪽) 테이블의 일치하는 행을 반환한다.
만약, 일치하는 행이 없다면 NULL을 반환한다
INNER JOIN : 양쪽 테이블에서 일치하는 행만 반환한다, 일치하지 않는 행은 제외한다.
일치하는 행??
ON절 에서 공통한 컬럼을 뽑아낼때 A테이블에도 에도 같은 컬럼이 있고, B테이블에도 같은 컬럼이 있는 경우이다.
-- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명
-- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명매니저님께서 오셔서 전반적인 일
'TIL' 카테고리의 다른 글
20240712 사전캠프 10일차 TIL (0) | 2024.07.12 |
---|---|
20240711 사전캠프 9일차 TIL (0) | 2024.07.11 |
20240709 사전캠프 7일차 TIL (0) | 2024.07.09 |
20240708 사전캠프 6일차 TIL (0) | 2024.07.08 |
20240705 사전캠프 5일차 TIL (0) | 2024.07.05 |