일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- Java
- 엘라스틱서치
- 클린코드
- 애자일기법
- API
- 개발
- Elasticsearch
- JPA
- 애자일프로그래밍
- 개발자
- kotlin
- 데이터베이스
- ES
- 자바
- framework
- 그리디알고리즘
- cleancode
- 알고리즘
- spring boot
- 코딩테스트
- 코딩
- Baekjoon
- 읽기쉬운코드
- 그리디
- database
- 스프링
- 백준
- 프레임워크
- 코드
- Today
- Total
목록Java (40)
튼튼발자 개발 성장기🏋️

문제 기출 : [https://www.acmicpc.net/problem/1969] 풀이 방법 [그리디알고리즘] 접근 해답의 가장 큰 핵심은 각 N개의 DNA의 각 M번째 자리수(char)가 가장 많은 문자를 출력하고 카운팅해주면 된다. 가장 좋았던 조건. 체크해야할 문자를 4개로 제한 한것. (만약 제한이 없고 Alphanumeric이었다면 과연 어땠을까..?ㅠㅠ) 2중 for문을 이용해서 N개의 DNA를 탐색하면서 각 자리의 char를 체크한다. A면 A를 카운팅, T면 T를 카운팅 ····. 카운팅 된 수 중, 가장 큰 값을 채택하고 그 값을 N에서 뺀 것을 누적하여 더해주면 Hamming Distance의 합이 될 수 있다!!! 채택된 해당 max값을 가진 char를 가지고 온다. 그 값이 바로 ..

문제 기출 : [https://www.acmicpc.net/problem/1931] 풀이 방법 [그리디알고리즘] 접근 여러가지 풀이 방법이 떠올랐다. 한참 이 문제를 풀 때 쯤에 Comparator와 Comparable을 연습하고있던 찰나여서 생각나는대로 작성했다. 2차원 배열에 입력 값을 저장 -> sort (끝나는 시간 기준, 같으면 시작시간 기준) -> 끝나는 시간을 체크해가면 카운팅 -> 마지막 카운트 값을 출력 참고로 더 간단하게 풀이도 가능하다. 우선순위 큐를 생각해보면 답이 나올 것이다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new Input..

문제 기출 : [https://www.acmicpc.net/problem/1439] 풀이 방법 [그리디알고리즘] 접근 어쨌든 문자열은 0과 1로만 이루어져 있으므로 각각 뒤집었을 때의 count를 비교해서 크기가 작은 값이 답이 될 것이다. 주어진 문자열 S의 첫 문자를 첫 기준으로 잡고 S의 각 문자가 기준되는 문자와 다르면 기준에 따라 카운트. 카운트를 해줬다면 기준이 달라지기 때문에 0은 1로 바꿔주고 1은 0으로 바꿔야된다. 이렇게 기준점을 두고 S의 각 문자가 다르면 기준이 되는 문자의 카운트를 세어주기만 하면된다. 이러면 0일 때와 1일 때의 카운트가 각각 나오게 되는데 이 두 카운트 중에 최소값을 출력하면 된다. 문제 풀이 public class Main { public static void..

문제 기출 : [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..

문제 기출 : [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..

문제 기출 : [https://www.acmicpc.net/problem/10610] 풀이 방법 [그리디 알고리즘] 접근 30의 배수들의 특징을 알면 쉽게 접근 가능하다. '0'이 하나라도 있고 각 자리수의 합이 3의 배수이면 (3x10=30 이니까) 30의 배수라고 할 수 있다. 당연하게도 0으로 끝나야 하기 때문에 주어진 N에 '0'이 없으면 불가능하므로 바로 -1을 출력하고 종료하자. 주어진 N을 각각 자리수 별로 나누어 모두 더한 후 이 값이 3으로 나누어 떨어지지 않으면 바로 -1을 출력하고 종료하자. 문제에서 최대값을 원하고 있다. 그렇다면 sort하고 고대로 출력하면 끝. 문제 풀이 public class Main { public static void main(String[] args) { ..

문제 기출 : [https://www.acmicpc.net/problem/1049] 풀이 방법 [그리디 알고리즘]으로 접근 낱개의 가격과 6개세트의 가격을 별도로 array에 담는다. 그리고 각각의 가격에서 최소 값이면서 끊어진 라인의 수보다 크거나 같으면 된다. 최소값을 먼저 만족시키기위해 오름차순으로 sort 진행해서 가장 작은 0번째 값으로 먼저 체크하면 최대한 빠르게 찾을 수 있다. 문제 풀이 public class Main { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int answer = 0; try { StringTokenizer..