반복문을 통해 계속해서 출력 메소드를 호출 할 경우 수행 시간이 길어질 수 있다. 따라서 출력해야 할 String들을 계속해서 StringBuilder에 붙여 한 번에 출력하는 방법을 소개해보려 한다. Before : 출력 메소드 반복 호출 public class Main { public static void main(String[] args) { for(int i = 0; i < 10; i++) { System.out.println(i); } } } After : StringBuilder 사용하기 public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); for(int i = 0; ..
백준 10818 : 최대, 최소 StringTokenizer.hasMoreTokens() - 토큰이 남아있으면 true, 비어있으면 false Arrays.sort(array) - array를 정렬해준다. import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStr..
백준 1110 - 더하기 싸이클 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int cycle = 0; int newNumber = N; while(true) { newNumber = ((newNumber % 10) * 10) + (((new..
백준 1330 : 두 수 비교하기 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int A = Integer.parseInt(st.nextToke..
백준 2557 : Hello World public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } 백준 10718 : We love kriii public class Main { public static void main(String[] args) { System.out.printf("강한친구 대한육군\n강한친구 대한육군"); // System.out.println("강한친구 대한육군"); // System.out.println("강한친구 대한육군"); } } BufferedWriter - newLine() : 개행 메소드 import java.io.BufferedWriter; imp..
🦄 동적 계획법 (Dynamic Programming, DP) 동적 계획법은 복잡한 문제를 간단한 여러 개의 하위 문제(sub-problem)으로 나누어 푸는 방법이다. 같은 하위 문제를 가지고 있는 경우 이 결과값을 저장하여 한 번씩만 계산하도록 하며 이러한 기법을 memoization이라고 한다. 📌 문제를 풀 때 점화식과 함수 호출 과정을 생각해보면서 dp 테이블을 채워나가면 된다. 📌 또한 가능하면 재귀 함수를 이용하는 탑 다운 방식보다는 보텀업 방식으로 구현하는 것을 권장한다. 시스템상 재귀 함수의 스택 크기가 한정되어 있을 수 있기 때문이다. - dp 테이블 : 다이나믹 프로그래밍에서 사용되는 결과 저장용 배열/리스트 → 한 번 구한 결과는 계속해서 배열/리스트에 저장하고 그것을 이용하여 그 ..
📁 이진 탐색 (Binary Search) 💡 순차 탐색 (Sequential Search) 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법 ✔️ 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘 ✔️ 찾으려는 데이터와 "중간점" 위치에 있는 데이터를 반복적으로 비교하는 방법 중간점이 실수일 때는 소수점 이하를 버린다. ✔️ 데이터가 무작위일 때는 사용할 수 없지만, 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있다. ✔️ 시간 복잡도 : O(logN) → 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어든다. 💡 코딩테스트 데이터의 개수가 1,000만 개를 넘어가거나 탐색 범위의 크기가 1,000억 이상이라면 이진 탐색 알고리즘을 의심해보..
탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 📁 DFS (Depth First Search) : 깊이 우선 탐색 / 스택 + 재귀 ✔️ 최대한 멀리 있는 노드를 우선으로 탐색, 깊은 부분을 우선적으로 탐색 stack = [0, 1, 3, 4, 2, 5, 6] 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 인접한 노드 중에서 방문하지 않은 노드가 여러 개 있으면 번호가 낮은 순서부터 처리한다. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. 재귀함수는 수학의 점화식을 그대로 소스코드로 옮긴 형태..
루시와 엘라 찾기 코딩테스트 연습 - 루시와 엘라 찾기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 루시와 엘라 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요. SELECT ANIMAL_ID, NAME, SEX_..
없어진 기록 찾기 코딩테스트 연습 - 없어진 기록 찾기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 없어진 기록 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요. SELECT B.ANIMAL_ID, B.NAME FROM ANIMAL_INS..