본문 바로가기
728x90

넓고 얕은 자료구조 & 알고리즘/JAVA 알고리즘 문제를 위한 스킬23

문자열 접두사 접미사 체크 startsWith(), endsWith() 비교대상문자열.startsWith("체크할 문자열") 결괏값은 boolean 타입의 true or false이다. 비교대상문자열.endsWith("체크할 문자열") 결괏값은 boolean 타입의 true or false이다. String str "test"; str.startsWith("t"); // true str.endsWith("t"); // true 2023. 3. 27.
Map - getOrDefault 메서드 getOrDefault Java 8에 추가된 Collection API 함수 중 하나이다. 찾는 키가 존재하면 그 key의 value를 반환하고, 없거나 null이면 설정한 default 값을 반환한다. 사용 방법 getOrDefault(Object key, V defaultValue) key : map 요소의 키 defaultValue : 지정된 키로 매핑된 값이 없거나 null이면 반환하는 default 값 참고 https://woodadada16.tistory.com/14 2023. 3. 24.
다이내믹 프로그래밍(DP, 동적 프로그래밍) 1분 요약 정리 다이내믹 프로그래밍 하나의 문제를 단 한 번만 풀도록 하는 알고리즘이다. 한 번 계산한 문제를 다시 풀어야 하는 비효율적인 알고리즘을 개선할 수 있다. 다이내믹 프로그래밍의 목적 메모리를 사용하여 중복된 연산을 줄이고 중복 연산을 줄여서 수행 속도를 개선한다. 다이내믹 프로그래밍 사용 고려 완전탐색, DFS, BFS 등은 동일한 문제를 다시 푸는(만들 수 있는 모든 조합을 전부 따져봐야 하는) 단점을 가지고 있다. 이미 계산한 문제를 반복적으로 다시 풀어야 하는 비효율성이 보인다면 다이내믹 프로그래밍을 고려하는 것이 좋다. 다이내믹 프로그래밍으로 풀어야 하는지 판단할 수 있는 기준 DFS/BFS로 풀 수 있지만 경우의 수가 너무 많은 문제 경우의 수를 계산할 때 중복 연산이 많은 문제 다이내믹 프로그래밍.. 2023. 3. 14.
자바 EOF(End of File) 처리 방법 1분 요약(백준 10951) 백준 10951 언뜻 보면 굉장히 단순해 보이는 문제이다. 그런데, 예제 입력을 자세히 보면 일반적인 문제처럼 테스트 케이스 수를 입력받지 않는다. 잉? 그럼 입력이 종료되는지 어떻게 알지? 일단 백준에서는 어떻게 처리되겠지라고 생각했다. 그래서 IntelliJ에서는 데이터 입력이 끝이 났다는 것을 어떻게 표현할까에 대해서만 생각했다. while (true) { try { String str = br.readLine(); StringTokenizer st = new StringTokenizer(str); int A = Integer.parseInt(st.nextToken()); int B = Integer.parseInt(st.nextToken()); bw.write(A + B + "\n"); } cat.. 2023. 2. 21.
자바에서 문자열 곱하기 하는 방법 .repeat() 파이썬에서는 "hello" * 3 // 출력 : hellohellohello 이런 식으로 문자열에 곱셈을 하여 문자열을 숫자만큼 반복하여 입력할 수 있다. 자바에서는 "hello".repeat(3) // 출력 : hellohellohello 위와 같은 방식으로 가능하다. 💡 별 찍기 문제 등 반복적인 문자열을 출력해야 할 때 쓰면 유용하다. 2023. 2. 12.
우선순위 큐(Priority Queue) // 낮은 숫자를 우선으로 하여 꺼내 처리하는 int 형 우선순위 큐 PriorityQueue pq = new PriorityQueue(); // 높은 숫자를 우선으로 하여 꺼내 처리하는 int 형 우선순위 큐 PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); 2022. 11. 6.
정규표현식을 이용한 문자열에서 숫자 분리 String str1 = str1.replaceAll("[^0-9]", ""); // 문자열에서 숫자를 제외한 모든 값(공백 포함 )을 지움 String str2 = str2.replaceAll("[0-9]", ""); // 문자열에서 숫자를 지움 String str3 = str3.replaceAll("[0-9a-zA-Z]", ""); // 문자열에서 숫자, 대문자, 소문자를 모두 지움(공백이 없다는 가정 하에 특수문자만 남음) 2022. 10. 20.
바빌로니아 법(The Babylonian Method) 바빌로니아 법(The Babylonian Method) 임의의 수의 제곱근에 빠르게 수렴하는 수열을 만들어 근사값을 구하는 방법 => 제곱근을 구하는 점화식을 코드로 구현 static double sqrt(int num) { int PRECISION_COUNT = 10; // 임의의 자연수로 이 값이 클수록 더 정확한 근사값을 구할 수 있다. double x = num / 2.0; for (int i = 0; i < PRECISION_COUNT; i++){ x = (x + (num / x)) / 2; // xn+1 = (xn + (num / xn)) / 2 } return x; } 2022. 10. 20.
728x90