일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 부트캠프
- Spring Data JDBC
- 거듭제곱
- FilterChain
- 계산기만들기
- 인텔리제이
- 제네릭스
- 페어프로그래밍
- 깃허브
- 자바
- fibonacci
- 컬렉션프레임워크
- 첫글자대문자
- Spring Security
- java
- 그리디
- CSS
- 백엔드
- 백준알고리즘
- 알고리즘
- 회고
- testing
- 데일리코딩
- 자료구조
- spring data jpa
- 스프링
- CLI명령어
- HTML
- 문자열뒤집기
- Publishing
- Today
- Total
목록SEB (57)
나의 모양
💙 Permutation & Combination 순열(Permutation): 요소 n개 중에 m개를 선택하여 순서를 지키면서 뽑는 경우의 수 조합(Combination): 순서에 상관없이 요소 n개 중에 m개를 뽑는 경우의 수 ! (factorial, 팩토리얼) n! 은 n에서부터 1씩 감소하여 1까지의 모든 정수의 곱 (n 보다 작거나 같은 모든 양의 정수의 곱) 팩토리얼에서 0! 과 1! 은 1 💜 오늘의 생각 조각모음 그리디 아무리 봐도 문제는 알겠는데 구현을 못하겠어서 잠시 보류하고 자바 공부했다. 알고리즘 너무 어렵다...ㅠ.ㅠ
💙 Greedy Algorithm 선택의 순간마다 당장 눈앞에 보이는 최적의 상황으로 최종적인 해답에 도달하는 방법 선택 절차(Selection Procedure): 현재 상태에서의 최적의 해답을 선택 적절성 검사(Feasibility Check): 선택된 해가 문제의 조건을 만족하는지 검사 해답 검사(Solution Check): 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아가 위의 과정 반복 🤍 탐욕 알고리즘 조건 탐욕적 선택 속성(Greedy Choice Property): 앞의 선택이 이후의 선택에 영향을 주지 않음 최적 부분 구조(Optimal Substructure): 문제에 대한 최종 해결 방법은, 부분 문제에 대한 최적 문제 해결 방법으로 구성 ⇒ 항상 최적의 결..
💙 시간 복잡도 알고리즘에서는 문제에 대한 해답을 찾는 것과 함께 얼마나 효율적인 방법으로 문제를 해결했는지도 중요하다. 문제를 풀다가 더 효율적인 방법은 뭐가 있을지, 이게 제일 좋은 방법이 맞을지 고민하는 것은 시간 복잡도를 고민한다는 것과 같다. 🤍 개념 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 얼만큼의 시간이 걸리는지를 고려하는 것 효율적인 알고리즘을 구현하는 것 = 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 것 🤍 분류 최악의 경우(Worst Case): 최악의 시나리오로, 빅 오(Big-O) 표기법 사용 최선의 경우(Best Case): 최선의 시나리오로, 빅 오메가(Big-Ω) 표기법 사용 평균적인 경우(Average Case): 평균 시간을 나타내며, 빅 세타(..
✍🏻 Description 문자열을 입력받아 문자열을 구성하는 각 단어의 첫 글자가 대문자인 문자열 리턴 📝 Flow 1. 문자열로 이루어진 단어를을 돌리면서 담아줄 배열 만들기 - 단어 공백으로 구분 => .split(); 2. 결과값 담을 변수 만들기 3. 단어 순회 => for - String.valueOf(), substring() 4. 각 단어 첫글자 대문자 => .toUpperCase() 5. 문자열 join 5. 문자열 리턴 🤯 Difficulty 문자열을 읽어오는 것 공백으로 구분된 단어 앞을 대문자로 만드는 것 🪆 Attempt 단어 구분 → for문에서 문자열 반복 → 첫 글자 대문자 split한 문자열 join 📚 TIL split() 리턴: 문자열 → 문자열 배열 Parameters..
✍🏻 Description 문자열을 입력받아 순서가 뒤집힌 문자열 리턴 예시 String output = firstReverse(“abcde”); System.out.println(output); /* 출력값 edcba */ 📝 Flow 1. 순서가 뒤집힌 문자열 담을 변수 2. for loop => 문자열 읽어오기 3. StringBuilder.reverse() 활용 4. char[]로 역순된 새로운 char 배열에 저장 후 문자열로 변환 🤯 Difficulty 문제를 의사코드로 표현하기 어려움 🪆 Attempt 레퍼런스 → 이해 → 구현 📚 TIL StringBuilder 내부에 버퍼를 가지고 있어 변경 가능한 문자열을 만들 때 사용 StringBuilder.reverse(): 문자열 역순 배치 .t..
💙 Tree 🤍 개념 계층적 자료구조 대상 정보의 각 항목들을 계층적으로 연관되도록 구조화시키고자 할 때 사용하는 비선형 자료구조 단방향 그래프 깊이 (depth) 루트로부터 하위 계층의 특정 노드까지의 깊이(depth)를 표현 레벨(Level) 같은 깊이를 가지고 있는 노드의 묶음 형제 노드(Sibling Node): 같은 레벨에 나란히 있는 노드 높이(Height) 리프 노드를 기준으로 루트까지의 높이(height)를 표현 리프 노드와 직간접적으로 연결된 노드의 높이를 표현 부모 노드는 자식 노드의 가장 높은 height 값에 +1한 값을 높이로 가짐 트리 구조의 높이를 표현할 때에는 각 리프 노드의 높이를 0으로 놓음 서브 트리(Sub tree) 트리 구조의 root에서 뻗어 나오는 큰 트리의 내부..
✍🏻 Description 문자열을 입력받아 문자열을 구성하는 각 단어의 첫글자로 이루어진 문자열 리턴 📝 Flow 1. 빈 문자열 => 빈 배열 리턴 2. 단어 첫 글자 담을 배열 선언 3. 각 단어 첫글자 리턴할 변수 선언 4. 단어 반복하고 => for 반복한 단어돌리면서 추출한 앞 단어를 3번에 대입 5. 리턴 🤯 Difficulty 4번을 의사코드로 자세하게(?) 작성하고 구현하는 것 🪆 Attempt 레퍼런스 → 이해 → 구현 필요한 메서드 확인 📚 TIL charAt() String type을 char type으로 변환 사용문자열_변수이름.charAt(문자열 순서) 👩🏻💻 Implementation if(str.length() == 0) return ""; String[] words = s..
✍🏻 Description 2의 거듭제곱 여부 판단 거듭제곱: 같은 수를 거듭하여 곱함 ⇒ 주어진 수를 주어진 횟수만큼 반복 📝 Flow - 2의 거듭제곱? 2의 0승 == 1 2 * 2 = 4 2 * 2 * 2 = 8 2 * 2 * 2 * 2 = 16 2 * 2 * 2 * 2 * 2 = 32 - 짝수라고 다 거듭제곱은 아님 => 6, 10 이런거 6 = 2 * 3 10 = 2 * 5 - 로직흐름: 2로 나눈 나머지는 다 0? 초기값: 8 | 몫 | 나머지 1회차 | 4 | 0 2회차 | 2 | 0 초기값: 10 | 몫 | 나머지 1회차 | 5 | 0 2회차 | 2 | 1 초기값: 7 | 몫 | 나머지 1회차 | 3 | 1 2회차 | 1 | 1 => 나머지가 1이 하나라도 있으면 거듭제곱 X => 모두 ..