Java
[백준] '피보나치 수 5' - Java
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 피보나치 수의 개념을 알고 코드로 구현하는 문제였다. 앞선 두 수와 합해지는 수, 총 3개의 변수로 나누어 구현해보았다. Answer 1) int i = 0; int k = 1; int r = i + k; int cnt = 0;..
[백준] '팩토리얼' - Java
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 수학적 개념인 팩토리얼을 코드로 구현하는 문제였다. Answer 1) for(int i = N; i >= 1; i--) { result *= i; } 1부터 곱해가며 N까지 누적곱해도되지만, 여기서는 N부터 1까지 1씩 감소시키며 result에 누적곱해주었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buffer..
[백준] '좌표 압축' - Java
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 랭킹 알고리즘과 유사하다. 1. 낮은 값이 높은 순위를 갖는다. (가장 높은 순위는 0순위다.) 2. 중복되는 원소는 같은 순위를 갖는다. 3. 낮은 값이 높은 순위를 갖는다는 것, 결국 순위를 정한다는 것은 오름차순으로 '정렬'을 했을 때 첫 번째 인덱스에 있는 원소가 가장 높은 순위를 갖고, 반대로 가장 마지막에 있는 원소가 가장 낮은 순위를 갖는다는 것을 의미 4. 여기서 우리는 순위를 매겨야..
[백준] '좌표 정렬하기' - Java
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 1) 모든 원소들을 좌표별로 x를 오름차순 정렬하고, x가 같다면 y를 오름차순 정렬하라 2) 두 좌표를 모두 입력받았다고 가정해보자. 그리고 arr[i][0] 와 arr[i+1][0] 을 정렬할 것이고 만약 두 값이 같다면 arr[i][1] 과 arr[i+1][1] 을 비교할 것 >> 람다활용과 함께 Comparator를 오버라이딩하여 작성 첫번째 정렬 기준은 x좌표의 오름차순이고, x좌표가 같을 경우에는 y좌표의 오름차순 정렬을 해야한다. Answer 1) Arrays.sort(arr, (e1, e2) -> { if(e1[0] == e2[0])..
[백준] '통계학' - Java
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 요구하는 산술평균, 중앙값, 최빈값, 범위를 구하는 문제이다. 나머지는 간단한 연산으로 구할 수 있다고 해도 최빈값을 구하는 부분에서 생각이 많아졌다. Try 1) BufferedReader br = new BufferedReader(new Inp..
[백준] '수 정렬하기3' - Java
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. >> 주의사항 : 시간 제한 이번 문제는 시간제한(=시간복잡도 고려)도 있지만, 수의 범위가 매우 크기때문에 배열의 크기를 10001크기로 선언한다. boolean배열로 선언하게 되면 중복으로 입력되는 데이터를 처리하기 힘들어진다. (인덱스로 접근하기 때문) Answer 1) int[] arr = new int[10001]; // 자연수를 입력받고, 0도 제외된 데이터이므로 1부터 시작 for(int i = 1; i < arr.length; i++) { // arr에 입력된 데이터가 있는 경우에만, 그 값을 StringBuilder에 누적 // StringBuilder에 누적시키면, 그만큼 arr은 카운트를 감소시킴 while(..