일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- stack
- 백준1427
- 백준1253
- 백준1940
- Java
- 백준11720
- 백준12891
- 백준11399
- 백준2751
- 자바
- 백준1377
- 정렬알고리즘
- 백준11286
- 백준1260
- 백준11724
- 백준2023
- 백준17298
- 버블소트
- 백준1517
- 백준11003
- 백준2750
- 백준13023
- 백준1874
- 백준2018
- 백준1546
- 구간합
- 백준_11659
- 백준_구간합구하기
- 백준10998
- 백준
- Today
- Total
목록백준 (22)
HOONDOC

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..