일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발
- 애자일기법
- 코딩
- 백준
- 데이터베이스
- 클린코드
- Baekjoon
- 개발자
- framework
- 애자일
- 엘라스틱서치
- 코딩테스트
- Elasticsearch
- 코드
- Java
- 프레임워크
- 그리디
- 그리디알고리즘
- spring boot
- 알고리즘
- JPA
- Spring
- 애자일프로그래밍
- 읽기쉬운코드
- cleancode
- API
- ES
- 자바
- 스프링
- database
- Today
- Total
목록전체 글 (172)
튼튼발자 개발 성장기🏋️
문제 기출 : [https://www.acmicpc.net/problem/11399] 풀이 방법 [그리디알고리즘] 접근 굉장히 쉽게 접근할 수 있다. Pi를 오름차순으로 정렬해서 최소로 걸리는 사람부터 탐색하는 것이 기본. 다음과 같은 조건을 만족하면 된다. 기다리는 시간 = i번째 사람이 돈 뽑는데 걸리는 시간 x (사람 수 - i) 즉 기다리는 시간을 누적해 나아가면 답이 나올 것이다. 문제 풀이 public class Main { public static void main(String[] args) { int answer = 0; Scanner sc = new Scanner(System.in); int peopleCount = sc.nextInt(); int[] peopleTime = new int..
소스를 볼 때면 "이 변수에 뭐가 담겨 있는겨?" 혹은 "이 함수는 뭐하는 겨?"혹은 "이 클래스는 뭐여?" 등과 같은 의문을 품곤 한다. 나의 소스건 남의 소스건 "개떡같이 이름 지었네.."라고 마음 속으로 한 마디 하고 열심히 코드분석을 시작한다. 네이밍이 말은 쉽지만 정말 어려운 부분이 될 수 있다. [읽기 쉬운 코드]를 작성하기 위한 첫 걸음이 아닌가 싶다. 항상 어떤 function, 변수, Object, DB field, table 등을 만들 때 네이밍에서 시간을 한참 잡아먹는다. 네이밍 센스가 없기 때문이다. 하지만 시간을 많이 들여도 괜찮으니 최대한 좋은 이름일 짓도록 투자해보는 것이 우리 모두가 이로운 일이 될 수 있다! 내가 취업한지 2년도 채 되지 않았지만 이런 경험이 가장 많다. "..
문제 기출 : [https://www.acmicpc.net/problem/1138] 풀이 방법 [그리디알고리즘] 접근 키가 큰 사람 다음에 키가 작은사람이 있으면 하는 생각에 여러가지에 테스트 케이스를 생각해보다가 "정말 이게 가능한가?"라는 생각이 문득 들었다. 그 순간 어렵게 접근하지 않고 쉽게 접근해보았다. 모든 것을 다 내려 놓자. 키가 큰 순서대로 list에 저장하면 될 일이 아닌가? 즉 역순으로 탐색하면서 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지의 자리에 (인덱스+1)을 넣는다. 키가 4인 사람은 0명. list = [4] 키가 3인 사람은 1명. list = [4, 3] 키가 2인 사람은 1명. list = [4, 2, 3] 키가 1인 사람은 2명. list = [4, 2, 1, 3..
문제 기출 : [https://www.acmicpc.net/problem/1120] 풀이 방법 [그리디알고리즘] 접근 A는 B보다 같거나 짧다는 것을 기억한다. (B.length() - A.length() + 1)만큼 반복해가면서 같은 문자를 체크할 것이다. B를 i부터 (i + A.length())만큼 잘라서(이하 B`) 그 길이만큼 반복해가며 A의 각 문자와 자른 B`의 각 문자를 비교. 같으면 카운트한다. 카운트한 것 중에 가장 큰 값을 출력하면 문제 의도를 만족시킬 수 있다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamRead..
문제 기출 : [https://www.acmicpc.net/problem/11047] 풀이 방법 [그리디 알고리즘] 접근 K원을 민드는데 필요 동전의 개수의 최소값은 동전의 가치가 큰 녀석부터 선택해가면서 차감시킨다. 물론K보다 같거나 작은지 체크 해가면서. 문제에서 친절하게도 오름차순으로 준다. sort가 필요 없다는 말이다. 나는 읽은 동전의 가치가 K보다 같거나 크면 더 이상 읽지 않는다. 무의미하기 때문이다. 어차피 사용하지 못하는 동전이기 때문이다. 그럼 읽은 동전의 가치 중에서 가장 가치가 높은 순서대로 선택해서 K가 0 이하가 될 때까지 K원에서 차감시킨다. 문제 풀이 import java.io.BufferedReader; import java.io.IOException; import jav..
좋은코드라는게 참 말은 쉽다. 우아하고💃 효율적인👍 코드. 단순하고😄 직접적인☝️ 코드. 다른 사람이 고치기 쉬운 코드. 자고로 이런 코드를 짜려면 단호한 프로그래머가 되어야 한다!(?) Memory leak, Race conditional, 명명법의 일관성 등을 소홀히 하면 안된다. 아무리 가독성이 높고 우아한 코드임에 틀림없어도 테스트 케이스가 없으면 무용지물. (그래서 TDD가 중요한 것..!!!!🤔) 그래서 깨끗하고 좋은 코드를 보면 마치 영화보듯이 느낀다고....(ㄹㅇ?) 의외로 좋은코드는 명쾌한 추상화와 제어문으로 가득 차 있다고 한다. 사실 나는 개인적으로 제어문이 가득한 코드를 싫어한다. 그만큼 복잡하고 얽혀있다는 생각이 들기 마련이기 때문. 그래서 어떻게 해야하는데?😥 ☝️중복을 줄이자!..
[왜 Clean Code?] 로직을 기가 막히게 짜고, 문제해결 능력이 뛰어난다고 한들 해당 코드가 쉽게 읽히지 않는다면 그것은 좋은 코드일까? 약 9년 동안 코딩을 하면서 단 한 번도 "읽기 쉬운 코드"에 대해 생각해본 적이 없다. 대학생 때 까지만 해도 나는 다음 리스트를 만족하는 코드가 좋은 코드라고 생각했다. 예외 처리가 잘 된 코드 메모리를 절약한 코드 각 언어 특성을 잘 이용한 코드 운좋게 취업에 성공하고 "학생"이 아닌 "개발자"로서 꽃이 필 무렵 주석과 변수 혹은 Object 명, 함수명 등과 같은 네이밍 이야기를 할 수 있는 기회를 얻었다. 나의 팀장님께서는 이렇게 말씀 하셨다. "가장 좋은 코드는 주석이 없고 변수 명만 봐도 뭐하는 녀석인지 알 수 있는 코드야." 위 조건을 만족하면서 ..
문제 기출 : [https://www.acmicpc.net/problem/1080] 풀이 방법 [그리디 알고리즘] 접근 나는 본 문제 풀이에 실패했다. 만약 성공적인 풀이를 원한다면 (Alt + ←) 꾹 눌러도 좋다. 주어진 A행렬과 B행렬의 핼과 열의 수가 적어도 3이상이어야 하기 때문에 3미만이면 -1 출력 후 종료. 주어진 A행렬과 B행렬을 비교한다. 만약 값이 서로 다르면 1, 같으면 0으로 세팅한 C행렬을 만들었다. 만약 C행렬의 모든 값이 0이면 A와 B가 동일하므로 0 출력 후 종료. C의 행렬을 모두 0으로 만들어 주기 위한 연산의 수를 구하는 것이 우리의 목표다. 그러기 위해 3by3 행렬로 잘라서 행렬연산을 해보자. 뒤집으면 count를 세어준다. 만약 한 번밖에 연산을 하지 못하는데(..