일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Github Actions
- GithubActions
- 자바 유클리드
- cicd
- git 컨벤션
- ineer join
- Git사용법
- sql 데이터형 변환
- StringBuilder
- 자바 스트링
- islowercase()
- 베주계수
- 자바 최소공배수
- 래퍼타입
- string
- 최소공배수
- stringbuilder의 reverse()
- string과 stringbuilder
- 프로그래머스 레벨1
- 동일성과 동등성
- 최대공약수
- 스프링
- 스프링환경설정
- 모던자바
- 스프링뼈대
- isuppercase()
- while과 two-pointer
- toLowerCase()
- 유클리드호제법
- addDoc
- Today
- Total
주노 님의 블로그
20240730 본캠프 12일차 TIL 본문
본캠프 12일차 내용 간단요약
- 09:00 ~ 10:00 : 코드카타
- 10:00 ~ 12:00 : 개인 과제
LV3-2 과제 - 12:00 ~ 13:00 : 점심시간
- 13:00 ~ 14:00 : 개인 과제
과제 리팩토링 - 14:00 ~ 15:00 : 자바 복습
- 15:00 ~ 18:00 : 스프링 복습
- 18:00 ~ 19:00 : 저녁시간
- 19:00 ~ 20:00 : 깃 심화 강의
- 20:00 ~ 21:00 : TIL작성
오늘 해야할 일✔️ 🔺 ❌
🔺 과제 완성 및 마무리
코드카타 - 가장 가까운 같은 글자
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
제한사항
1 ≤ s의 길이 ≤ 10,000
s은 영어 소문자로만 이루어져 있습니다.
입출력 예
s result
"banana" [-1, -1, -1, 2, 2, 2]
"foobar" [-1, -1, 1, -1, -1, -1]
푸는 방법은
class Solution {
public int[] solution(String s) {
int[] answer = new int [s.length()];
boolean flag = true;
for(int i = s.length()-1;i>=0;i--) {
flag = true;
int count = 1;
answer[i]=-1;
for (int j = i-1; j >= 0; j--) {
if (flag == true && s.charAt(i) == s.charAt(j)) {
flag = false;
answer[i] = count;
}
count++;
}
}
return answer;
}
}
위와 같다
i를 고정한후, j를 i보다 하나 더 작게 (i랑 겹치면 자기를 판단해버림)
반복문을 돌면서 같으면 flag값을 둬서 첫번째값인지 확인을한다 첫번째값이고 문자가 같으면 count로 그 위치의 거리를 알 수 있다.
하지만 내 코드에서는 비효율적인 부분을 볼 수있는데
flag가 false라도 j반복문은 모두 돌게된다
결국 시간복잡도는 o(n^2)이 되는것
뾰족한 수가 떠오르지않아 챗지피티에게 물어봤다
import java.util.HashMap;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
// map을 사용한다 char과 문자의 마지막 위치를 저 장한다
HashMap<Character, Integer> lastSeen = new HashMap<>();
//for문을 돌아 전체 길이를 반복한다
for (int i = 0; i < s.length(); i++) {
//currentChar변수를 생성하여 그 위치의 문자를 할당한다
char currentChar = s.charAt(i);
//만약 현재 위치의 char이 lastSeen에 있으면
if (lastSeen.containsKey(currentChar)) {
//그 위치를 반환하고
answer[i] = i - lastSeen.get(currentChar);
} else {
//아니면 -1를 반환한다
answer[i] = -1;
}
//그 결과는 map에 저장된다
lastSeen.put(currentChar, i);
}
return answer;
}
}
따라서 map에 처음부터 모든 문자가 등록된게 아니라
처음부터 쌓으면서 진행하는것
이런방법도 있구나를 느꼈다
코드카타 - sql
PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID는 기본키입니다.
문제
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
select id, name, host_id
from places
where host_id IN (
select host_id
from places
group by host_id
having count(*) >= 2
)
order by id;
어제 결국 문제를 풀지 못했다 그래서 검색했음
where절에도 서브쿼리를 쓸 수 있다니
HOST_ID가 공간을 둘 이상 예약한 사람을 해비유저라고 한다
select host_id
from places
group by host_id
having count(*) >= 2
나는 이렇게만 사용하면 될 줄 알았는데 안되는 이유를 알았다
GROUP BY로 묶을수는 있어도
그 묶은것을 또 풀어서 출력을 해야하기때문에 서브쿼리로 감싼것이다
WHERE절에 서브쿼리를 넣거나 본인테이블을 본인테이블이 조인을 해서 조인문안에다가 SELECT문을 넣는것도 배울수 있었다.
과제 코드 개선
2-10 개선
![](https://blog.kakaocdn.net/dn/cjaDva/btsISOBd5hT/0LDF2wX6VlTs05a7w6SIw1/img.png)
구현해놓고 보니 2-10에 추상 클래스를 명시해놓고 2-9를 사용하고 있었다
그래서 수정했다
2-1 개선
요구사항을 자세히 보니 exception 클래스를 생성하고
Exception 클래스를 생성하여 throw 합니다. (매개변수로 해당 오류 내용을 전달합니다.)
라고 한다
![](https://blog.kakaocdn.net/dn/D5UIF/btsISemKKDQ/ACXEl9tVbD8pkVhi7sf9tk/img.png)
badInputException을 사용해서 매개변수로 msg를 받고
![](https://blog.kakaocdn.net/dn/bnyWpH/btsIPZELq0B/XBCX2sEYZwyKQqaxp2saI1/img.png)
이렇게 전달해준다.
아마 과제 3-1을 먼저 만들어서 아마 위 연산자 에러는 뜨지않을것이다.. default로 절대 가지않는다 순서는 꼬였지만 그래도 구현해놔야할거같아서...
![](https://blog.kakaocdn.net/dn/bItr96/btsIPZELtpb/MJBZQBp5KyfBv1C0nY9Hj1/img.png)
3-2
구현했지만 대차게 더러운코드가 되어서 내일 아침에 잠깐 고민해볼 예정이다
깃허브 강의
git branch 브랜치명 : 브랜치 생성하기
git branch : 브랜치 확인하기
git switch 브랜치명 OR git checkout 브랜치명 : 브랜치 이동
git merge 브랜치명: 브랜치 합치는 명령어
git push origin 브랜치명 :
pull request : 합칠때 다른 팀원이 작업한 내역을 봐야할때, 만약 로컬에서 확인한다면
만약 협업을 한다면?
Main브랜치 : 배포용
develop 브랜치 : 테스트용
기능 브랜치 : 기능 개발용
로 개발하는게 좋다
develop를 개발 중 브랜치로, 기능 브랜치로 pull해서 테스트후, 충돌이 나지 않으면 기능브랜치에서 develop 브랜치로 push하기
팀 협업을 할때는?
1. 레파지토리를 만들 팀장이 레포지토리를 생성한다
2. dev 브랜치를 생성하여 깃허브에 반영한다 (git switch -c dev , git push origin dev)
3. settings > dev브랜치를 default로 고정한다
4. 팀원을 collaborator로 등록한다
5. 팀원은 초대를 받으면 git clone을 한다(초대를 받은 후 git clone 주소 .)
6. 팀원은 받으면 git switch로 기능 브랜치를 만든다
7. 브랜치를 만든후 push할일이 있으면 push하고 깃허브 페이지의 pull request를 한다
8. 팀원은 base(옮길)브렌치와 compare(결합할 내 기능 브랜치)를 확인한다
9. 팀은 merge pull request를 한다
10. 합쳐진 내용을 반영한다 (git pull origin dev
오늘의 회고 & 12시간 몰입했는가?
오늘은 그동안 공부한 스프링 복습했다
내일은 스프링 공부 계속하고 피드백 나오면 정리해야지
한 2시간은 멍때린듯..
찾아볼 내용
코테에 사용하는 컬렉션 예제보기
'TIL' 카테고리의 다른 글
20240801 본캠프 14일차 TIL (0) | 2024.08.01 |
---|---|
20240731 본캠프 13일차 TIL (0) | 2024.07.31 |
20240729 본캠프 11일차 TIL (0) | 2024.07.29 |
20240726 본캠프 10일차 TIL (0) | 2024.07.26 |
20240725 본캠프 9일차 TIL (0) | 2024.07.25 |