일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 개발
- cleancode
- 애자일기법
- 클린코드
- 애자일
- spring boot
- 스프링
- 코딩테스트
- 그리디알고리즘
- 프레임워크
- framework
- 자바
- 애자일프로그래밍
- 코드
- database
- Spring
- 백준
- 데이터베이스
- 그리디
- 코딩
- 엘라스틱서치
- 개발자
- Elasticsearch
- Java
- JPA
- Baekjoon
- ES
- API
- 읽기쉬운코드
- Today
- Total
목록전체 글 (172)
튼튼발자 개발 성장기🏋️
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bhcZvj/btqDyNou2Lf/BQvcXsSwmO12zsJbThZhk0/img.png)
문제 기출 : [https://www.acmicpc.net/problem/1543] 풀이 방법 [그리디알고리즘] 접근 내가 문제를 잘못 이해 했는지 두 시간 가량을 잘못된 방향으로 풀이되어서 상당히 시간낭비하였다. 문제를 읽어보면 "찾는 단어가 최대 몇 번 중복되지 않게 등장하는지?"이다. 주어진 조건 "몇 번부터든지 시작 index는 모두 가능"을 생각하여 나는 코드를 작성하였지만 전부 다 실패... 아무리 문제를 되새김질해도 난 모르겠다... 그래서 다른 블로그를 참고하였더니 문제 이해를 도와주었다...ㅠㅠ 주어진 문자열에서 찾을 문자열을 찾되, 중복되지 않게 등장하는 최대값을 구해야한다. 즉 주어진 문자열에서 찾을 문자열을 찾고 찾은 문자열을 빼버리면서 카운트 하면 되는 아주 간단한 문제였다.. 나..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cbLwKC/btqDyE6gCYa/Oyp02w1kw6EXKpJK73DMzK/img.png)
우리가 무언가를 개발 할 때에 모든 것들을 전부 만들지는 않는다. 외부 패키지를 사용할 수도 있고 잘 짜여진 프레임워크를 쓸 수도 있고 오픈 소스를 사용할 수도 있다. 모두가 하나같은 마음을 가지면 좋겠지만 각기 다른 성격과 특성을 가지고 있고 서로 다른 목적이 뚜렷하고 그 목적에 맞게 설계되어 mix하여 사용할 땐 큰 어려움이 따른다. 이를테면 버전이 호환 안되서 잘 따져 보아야 하고, 캡슐화, 독립성 등을 고려해서 구조를 잡아 가는 것이 핵심. 그 외에도 고민해야할 것들이 많을 것 같다. 난 이 책을 읽고 Map이 얼마나 위험하고 귀찮게 하는 녀석인지 깨달았다. Map을 사용할 땐 캡슐화를 고려해보자!!!☝️ 그 이유는 Map(Collection과 같은) 혹은 Object 등 많은 데이터를 포함할 수..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b4fMAe/btqDwDOcWZY/2N6hKSwR9JQkmdFjNnxeRk/img.png)
문제 기출 : [https://www.acmicpc.net/problem/2437] 풀이 방법 [그리디알고리즘] 접근 정답 비율이 37%라서 겁먹었지만 아주 쉬운 문제다. 최소값을 구하라고 했으니까 당연하게도 오름차순으로 정렬이 우선이다. 그래서 작은 무게의 추를 먼저 가지고 와서 체크를 할꺼다. 새로운 추를 가지고 왔는데 만약 이 새로운 무게가 저울의 (무게의 합 + 1)보다 크면 저울의 (무게의 합 + 1)이 최소값이 될 수 밖에 없다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int answ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Tv6WO/btqDwelX7DC/5FAgDNF202JQaiDqWhDNj1/img.png)
문제 기출 : [https://www.acmicpc.net/problem/2529] 풀이 방법 [백트래킹 : backTracking] 접근 가장 먼저 default 값을 만들자. 최대값의 경우에는 9부터 -1씩 해가면서 채워주고, 최소값의 경우에는 -부터 _1씩 해가면서 채워준다. 이제부터 backTracking 기법을 사용하여 부등호를 만족하는지 체크한다. 부등호를 읽어올 필요없이 그냥 javascript engine을 사용해서 boolean 값을 받기만 하면 된다. 부등호가 만족하지 않는다면 앞의 숫자와 자리를 바꿔준다. 왜냐하면 최대값과 최소값을 구해야하기 때문이다. 이런식으로 체크를 끝까지 하게 되었을 때 나온 값이 바로 최대값 최소값이 될 수 있다. 단 한 번의 backTracking으로 최대값..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/oDQ5h/btqDsb4Qtrs/YF8hgVKhdarP7ra8E1scs1/img.png)
사실 함수를 만들다보면 return이 필요없는데 해야할 때가 종종있다. 설계를 잘 했다면 그럴 일은 없어보이지만...핳핳 그럴때면 null을 return하는 것이 가장 만만하고 예외처리만 잘 해주면 될 것이라 생각했다. 이것은 나의 잘못된 방식🤛🤛🤛. null을 return하지 않고 좋은 방법이 있었다. null을 리턴 해놓고 그것에 대해 예외처리를 한 들, 나중에 어떤 화살로 돌아올지는 아무도 모른다. null을 왜 반환하면 안되는지 궁금하다면 꼭 책을 읽어보자!!! (뼈저리게 느낄 수 있음 주의ㅋㅋ) 예외를 잘 던지면 코드가 이쁘고 절 읽을 수도 있으며 이해도를 상당히 높일 수 있다. 이 책을 읽고 예외 던지는 '신의 한수'를 알아냈다. 꼭 읽자. 두 번읽자 세 번읽자. 그러나 적용하려면 연습과 더 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/y4UwG/btqDurFyOBq/cFlGOQTVN1zYjmicgpYGok/img.png)
문제 기출 : [https://www.acmicpc.net/problem/2352] 풀이 방법 #1 [backTracking] 접근 2일 동안 이 문제에만 몰두했다. 그냥 생각나는대로 경우의수를 나열하여 백트래킹 기법으로 하나하나 탐색하여 체크했다. 문제는 풀었지만 당연하게도 시간초과..(정답인지도 모르겠다.) 그래서 다른 방법을 채택했다. 문제 풀이 #2 public class Main { private static int maxCount = 0; public static void backTracking(int[] input, int start, int end) throws Exception { int count = 1; int temp = end; int flag = 0; if(start == inp..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bnxNI8/btqDoglRNOr/zjik7qBvIplh9VKRXAWFUk/img.png)
문제 기출 : [https://www.acmicpc.net/problem/2217] 풀이 방법 [그리디알고리즘] 접근 1. N개의 버틸 수 있는 중량을 배열에 저장하여 sort. 2. 버틸 수 있는 최대 중량을 구해야하므로 큰 값 먼저 탐색하여 다음 식을 적용 i번째 로프의 버틸 수 있는 중량 x (로프의 수 - i) 3. 최대값이 정답이 된다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int answer = 0; try { int N = Integer.parseInt(br.readLine());..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Y5ByU/btqDtAbsGR8/pKpGxv9V2m0uj081kBw1zK/img.png)
문제 기출 : [https://www.acmicpc.net/problem/1946] 풀이 방법 [그리디알고리즘] 접근 문제를 읽고 "이건 무조건 객체 정렬이다!"라고 생각했다. 가장 먼저 서류 설적과 면접 성적을 따로 받고 두 성적에 대해 제한을 두고 있으니 당연한 것이 아닌가. 객체 정렬 후 오직 면접 성적만을 비교하여 큰 값을 갱신해가며 카운팅하면 된다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int answer = 0; try { int testCase = Integer.parseInt(b..