본문 바로가기

반응형

컴퓨터

(71)
JAVA - 백준 알고리즘 - 1931번 회의실 배정 백준 단계별 풀기에 그리디알고리즘으로 분류되어있는 문제인데, 간단하게 풀릴줄 알았지만 생각보다 시간이 오래 걸렸다. Comparator의 정렬함수를 적절히 구현하여 간단하게 답을 구했다. 정렬 방식 1. 끝나는 시간이 같을때 => 시작하는 시간이 이른 순서대로 2. 끝나는 시간이 다를때 => 끝나는 시간이 이른 순서대로 1번을 정렬해주는 이유는 시작시간과 끝나는 시간이 같은 경우를 고려해주기 위해서이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.String..
[코딩테스트][알고리즘] 3. Greedy(그리디) Greedy 알고리즘은 현시점의 최적해를 찾는 것을 통해 문제의 최적해를 구하는 것이다. 문제 P 를 여러 단계로 나누어서 해결해보자. 각 단계는 P1 , P2 , P3 .... P이라고 한다면 그리디 알고리즘으로 문제를 풀기 위해서는 P1, P2, P3 에 적용한 조건들이 모든 P에 대해서 똑같이 적용되어야 한다. 문제를 보고 가장 먼저 떠오르는 방법(가장 쉽게 떠올릴수 있는 방법)이 그리디알고리즘 일 확률이 높다. 추천문제 : 1. https://www.acmicpc.net/problem/15655 2. https://www.acmicpc.net/problem/1080 3. https://www.acmicpc.net/problem/1969 4. https://www.acmicpc.net/problem..
[코딩테스트][알고리즘] 2. Backtracking(빽트레킹) Backtracking 이란 알고리즘은 거창하게 보이지만 사실 별거 없다. 하지만 backtracking 알고리즘이 사용되는 문제는 몇 문제를 제외하고는 난이도가 엄청 높다고 한다. Backtracking은 완전탐색을 진행하다가 조건에 맞지 않는 경우 탐색을 중단하고 이전 단계로 돌아가는 방법이다. 빽트레킹의 경우에 시간복잡도를 계산하기는 힘든 경우가 많다. 얼마나 많은 조건을 추가하느냐에 따라서 실행속도가 달라진다. 추천문제 : 1. https://www.acmicpc.net/problem/15655 2. https://www.acmicpc.net/problem/9663 3. https://www.acmicpc.net/problem/2580 4. https://www.acmicpc.net/problem..
코딩테스트를 위한 자바(java) 순열함수 구현 - 3 c, c++ 과 같은 다른 언어에서는 라이브러리로 순열함수를 지원하지만 자바에서는 순열함수 라이브러리를 지원하지 않아 직접 구현해야한다. N개의 원소 중 M개를 뽑아 나열하는 모든 경우를 구하는 함수를 구현하는 코드는 다음과 같다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.StringTokenizer; public class P15654 { static int N, M; static ArrayList list = new ArrayList(); sta..
코딩테스트를 위한 자바(java) 정렬 - 2 오름차순 정렬하기 public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(3); list.add(10); list.add(1); list.add(4); Collections.sort(list); for(int i = 0 ; list.size() > i ; ++i) { System.out.println(list.get(i)); } // 결과 = 1 3 4 10 } 내림차순 정렬하기 public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(3); list.add(10); list.add(1); list.add(4); Col..
[코딩테스트][알고리즘] 1. Brute Force(브루트포스 , 완전탐색) brute force는 완전 탐색이라고도 불리며, 모든 경우의 수를 직접 대입해보는 방법으로 가장 간단하게 문제를 풀 수 있는 방법이다. 풀이법이 잘 생각나지 않는 문제라면, 완전 탐색을 이용해 코딩을 한 후 최적화하는 과정을 사용한다면 문제를 해결에 도움을 받을 수 있을 것이다. 완전 탐색의 시간 복잡도는 주로 O(N!), O(2^N)이다. 시간 복잡도를 알고 있으면, 문제의 조건을 보고 필요한 알고리즘을 유추하는 방법도 있다고 하니 시간 복잡도에 대해 알아놓으면 좋을 것 같다. 완전 탐색은 반복문을 이용하는 방법, 재귀 함수를 이용하는 방법이 있는데 보편적으로 사용되는 것은 재귀 함수라고 한다. 반복문의 경우 길이가 변하는 문제를 다룰때 구현이 복잡해진다는 단점이 있다. 초보자의 경우에는 재귀함수가 ..
코딩테스트를 위한 자바(java) 파일 입력, 출력 - 1 테스트케이스 입력이 다음과 같이 주어졌을때 처리 방법 case 1 : 첫 줄에는 숫자의 갯수 N / 두번째 줄부터는 숫자 주어진 경우 3 1 2 3 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); // 첫번째 N 문자 입력받기 String[] str = new String[N]; // N 크기의 String 배열 생성 for (int i = 0; N > i; ++i) { // String 배열에 입력받은 문자 담기 str[i] = br.read..

반응형