| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 구간합
- 백준1874
- 백준2023
- 백준2751
- 백준12891
- 백준2750
- 백준13023
- Java
- 백준11003
- 자바
- 백준11724
- 정렬알고리즘
- 백준2018
- stack
- 백준10998
- 백준17298
- 백준_구간합구하기
- 백준1546
- 백준
- 백준1940
- 백준1377
- 백준1427
- 버블소트
- 백준11720
- 백준11286
- 백준1260
- 백준1517
- 백준_11659
- 백준11399
- 백준1253
- Today
- Total
목록전체 글 (26)
HOONDOC
12891번: DNA 비밀번호 풀이 💡 메모리 : 26536KB, 시간 360ms 만족스러운 코드는 아니다. 일단 줄이 길어지는 기능 단위의 코드들은 메소드로 구분하여 구현했다. 이를 통해 코드의 가독성은 처음보다 개선되었다. 하지만 알고리즘에 맞추어 코드를 작성하다보니, 조건 분기가 잘못 설정되어 슬라이딩 윈도우의 마지막 회차에서 conCheck()메소드가 동작하지 않고 끝나게 되었다. 결국 for문 바깥쪽에서 if(conCheck()) ans++; 로 문제가 요구하는 답은 해결할 수 있었다. 이번에 배운 건, ‘알고리즘에 맞춰 코드를 작성’ 하는게 아니라 ‘전체적인 코드 플로우를 구상하고, 이에 맞추어 알고리즘의 반환, 진행을 커스터마이징 하는 것’이 더 깔끔한 가독성있고 깔끔한 코드를 만든다는 것이..
1253번: 좋다 풀이 💡 메모리 18528KB, 시간 288ms 이중 포문까지만 가능, 삼중 포문 부터는 시간 초과가 날 것이다. 입력되는 값의 범위가 -10억~10억이고 Integer의 범위가 -20억~20억이므로 두 수의 합은 안전하게 Long 타입으로 가져갔다.이 때 검사할 숫자들은 정렬된 상태여야 한다. 정렬된 값들에만 적용 가능하다. 핵심은 검사할 숫자를 정하고, 해당 숫자를 기준으로 투포인터 알고리즘을 적용하는 것이다. 투포인터 알고리즘 구현에 익숙해져가는 것 같다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ne..
1940번: 주몽 풀이 메모리 31284KB, 시간 480ms 정렬 후 백트래킹을 통해 확인해야 하는 경우의 수를 줄이는 게 핵심인 것 같다.이것보단 좋은 풀이가 있을 것 같다. i는 시작 인덱스, j를 종료 인덱스로 취급하여 nums[i]와 nums[j]의 합이 M일 때의 개수를 센다. 이 때 시작 인덱스의 값이 M보다 크거나 두 숫자의 합이 M보다 커지면 종료하고 다음 경우로 넘어가게 처리한다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); //..
2018번: 수들의 합 5 풀이 메모리 12892KB, 시간 152ms 투포인터의 개념이 생소했다. 근데 이렇게 탐색하는 방식은 자주 있을테니, 익혀두면 좋을 듯 수의 범위를 정해놓고 범위의 합에 대한 특정 조건에 따라 범위를 조절해나가며 탐색하는 방식 그래서 st_idx와 ed_idx가 등장한다. import java.util.Scanner; /* * TAG: 투포인터 * 앞에서부터 모든 경우의 수를 그리디로 탐색하고 싶을 때 사용하면 좋을듯..? */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int st_idx = 1; int e..
11720번: 숫자의 합 풀이 메모리 12852KB, 시간 112ms 간단한 문제였는데, 입력되는 데이터를 적절하게 받지 못하면 좀 헤멜지도 모른다. 입력 숫자의 길이가 기므로 String으로 받은 후 값 하나 하나 int로 변환, 더해주면 된다. import java.util.Scanner; /* * TAG: 배열, 가산합 * 12852KB112ms */ public class BOJ_11720 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); //숫자의 개수 String nums = sc.next(); char[] numsChar = nums.toCharArray(); ..
1546번: 평균 풀이 메모리 14644KB, 시간 156ms 수식을 일반화하지 않고 주어진대로 구현했다면 시간초과가 났을 것 같다. 공식이 주어진 상황에서는 일반화가 가능한지, 수식 단축이 가능한지 살펴볼 것. 출력 형식이 실수형이므로 float내지는 double을 쓴다.이 문제는 평균 값이므로 float만 써도 충분할듯 범위 문제로 틀릴까봐 그냥 double만 썼는데 import java.util.Scanner; /* * TAG: 수학, 수식 * A B C (A가 최고점) -> A/A*100, B/A*100, C/A*100 * 수식이 (모든 값의 합/최고점)*100으로 수렴 */ public class Main { public static void main(String[] args) { Scanner..
11659번: 구간 합 구하기 4 풀이 메모리 252892KB, 시간 1272ms 어려운 문제는 아니었는데, 인덱스 관련 처리가 약간 헷갈렸다.그래서 if문 처리 했는데 이럴 필요 없이 애초에 인덱스를 조절하면 되는 문제였음 a부터 b까지의 합을 구하라하면 sums[b] - sums[a-1]이 되어야 값이 나오는데, 이 때 a가 0이면 인덱스 범위 오류가 발생한다. 문제에서 주어진대로, 범위 i와 j가 1부터 시작하므로 구간합도 인덱스가 1일 때 최초의 값으로 설정하면 코드가 더 간단해진다. 아~주 약간의 메모리를 더 잡아먹지만 이건;; 쓰는게 정신건강에 나은 수준 물론 nums[0]와 sums[0]은 0으로 초기화해줘야한다. 그리고 System.out.println()으로 출력하면 깔끔하지가 않아서 S..
버블 정렬(Bubble Sort)는 정렬의 과정이 수면 위로 떠오르는 거품과 비슷한 모양이라고 해서 붙여졌다고 한다. 이름이야 어쨌든 시간 복잡도가 O(N^2)로 특정 횟수 이상으로는 도저히 못 쓸 코드로 보인다. 하지만 코드의 구현이 매우 간단하고 직관적이어서 많이들 쓴다고 한다. 최악 시간 복잡도 O(N^2) 최선 시간 복잡도 O(N) 평균 시간 복잡도 O(N^2) 공간 복잡도 O(1) 정렬의 핵심 아이디어는, 주어진 수를 오름차순으로 정리하고 싶을 때 값을 하나씩 확정하는 것이다. 5개의 수가 주어질 때 한 수와 인접한 숫자의 크기를 비교하여, 큰 값을 뒤로(오른쪽)으로 보내고 작은 값을 왼쪽(앞)으로 보내는 과정을 반복하면 5번째에는 가장 큰 수가 확정적으로 위치할 것이다. 아래의 예시를 보자. ..