문제 설명

1. A * (I - 1 < x= < I) 의 최소를 구하면 됨

풀이

x / A = 올림(I) 이다.
올림(I) * A = x -> (I - 1) * A = X

코드

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/2914
* BOJ 백준온라인져지 2914 저작권 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1[] = br.readLine().split(" ");
int A = Integer.parseInt(str1[0]);
int I = Integer.parseInt(str1[1]);
bw.write(String.valueOf(A * (I - 1) + 1));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초128 MB27592320211385.305%

문제

창영이는 노래 여러 개를 이어서 부르는 가수이다. 유명한 노래의 비슷한 멜로디를 이어서 부르면서 언제 곡이 넘어갔는지 모르게 만드는 것이 창영이 노래의 특징이다. 이런 노래로 상업적으로 엄청난 성공을 거둔 창영이에게 큰 시련이 찾아왔다. 그것은 바로 저작권이었다.

창영이의 노래에 포함되어 있는 멜로디는 모두 저작권이 다른 사람에게 있는 노래이다. 따라서, 이 음악으로 상업적인 활동을 했기 때문에, 저작권 협회에 저작권료를 내야한다.

창영이는 자신의 앨범에 포함되어있는 저작권이 있는 멜로디의 평균값을 구해보기로 했다. 이 값은 아래와 같이 구할 수 있다.

(창영이 앨범에 수록된 곡에 포함되어 있는 저작권이 있는 멜로디의 개수) / (앨범에 수록된 곡의 개수)

이 때, 평균값은 항상 올림을 해서 정수로 만들어야 한다. 예를 들어, 창영이의 1집 앨범 "영창에서 영원히 영창피아노를 친다"에 총 38개 곡이 수록되어 있고, 이 앨범에 저작권이 있는 멜로디가 894개가 있다면, 평균값은 23.53이 되고 올림해서 24가 된다.

매니저 강산이는 얼마나 많은 사람에게 저작권료를 주어야 하는지 궁금해졌다. 강산이가 알고 있는 정보는 앨범에 수록되어 있는 곡의 개수와 위에서 구한 평균값이다. 이 때, 적어도 몇 곡이 저작권이 있는 멜로디인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 앨범에 수록된 곡의 개수 A와 평균값 I가 주어진다. (1 ≤ A, I ≤ 100)

출력

첫째 줄에 적어도 몇 곡이 저작권이 있는 멜로디인지 출력한다.

예제 입력 1 

38 24

예제 출력 1 

875


문제 설명

3 개의 숫자를 이용해서 연도를 나타낸다.
E, S, M 을 이용해서 해당 연도를 우리가 알고있는 연도로 변경하자

풀이

1. 0, 0, 0  에서 1 씩 증가시키면서 값을 확인한다.
2. 15, 28, 19 보다 높아지면 1 로 만들어주고 다시 (1) 을 실행한다.

코드

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/1476
* BOJ 백준온라인져지 1476 날짜 계산 풀이
*/
public class Main {
private static int cycle[] = { 15, 28, 19 };
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int date[] = { Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()) };
int temp[] = { 0, 0, 0 };
for (int i = 1; i <= 15 * 28 * 19; i++) {
boolean t = true;
for (int j = 0; j < 3; j++) {
temp[j] = Math.max((temp[j] + 1) % (cycle[j] + 1), 1);
if (date[j] != temp[j]) t = false;
}
if (t) {
bw.write(String.valueOf(i));
break;
}
}
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다.

지구를 나타내는 숫자를 E, 태양을 나타내는 숫자를 S, 달을 나타내는 숫자를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)

우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다.

예를 들어, 15년은 15 15 15로 나타낼 수 있다. 하지만, 1년이 지나서 16년이 지나면 16 16 16이 아니라 1 16 16이 된다. 이유는 1 ≤ E ≤ 15 라서 범위를 넘어가기 때문이다.

E, S, M이 주어졌고, 1년이 준규가 사는 나라에서 1 1 1일때, 준규가 사는 나라에서 E S M이 우리가 알고 있는 연도로 몇 년인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 수 E, S, M이 주어진다. 문제에 나와있는 범위를 지키는 입력만 주어진다.

출력

첫째 줄에 E S M으로 표시되는 가장 빠른 연도를 출력한다. 1 1 1은 항상 1이기 때문에, 정답이 음수가 나오는 경우는 없다.

예제 입력 1 

1 16 16

예제 출력 1 

16

예제 입력 2 

1 1 1

예제 출력 2 

1

예제 입력 3 

1 2 3

예제 출력 3 

5266

예제 입력 4 

15 28 19

예제 출력 4 

7980


문제 설명

중복된 수를 구하면 된다.

풀이

1. Bitset 을 사용하는 방법
bitset 은 bit 의 0 1 로 그 숫자가 있나 없나 확인하는 테크닉이다.
나중에 직접 구현해보면서 자세하게 적겠다.
2. 등차수열의 합을 이용하는 방법
S = N(N - 1)/2 + M
M = S - N(N - 1)/2


ISKU 님의 Buffer read 부분을 참고했습니다.

해답

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/15719
* BOJ 백준온라인져지 15719 중복된 숫자 풀이
*/
public class Main {
private static byte[] buffer = new byte[78888905];
private static int next;
private static int b;
public static void main(String args[]) throws IOException {
System.in.read(buffer, 0, buffer.length);
long N = nextInt();
long sum = 0;
for (int i = 0; i < N; i++) {
sum += nextInt();
}
// sum - n(n - 1) / 2 = m
System.out.println(sum - (N * (N - 1) / 2));
}
private static long nextInt() {
long n = buffer[next++] - '0';
while ((b = buffer[next++]) >= '0')
n = (n * 10) + (b - '0');
return n;
}
}
view raw Main.java hosted with ❤ by GitHub

문제

1부터 N - 1까지의 정수가 하나씩 정렬되지 않은 채로 저장되어 있는 어떤 수열 A가 있다. 수열 A에 임의의 정수 M(1 ≤ M ≤ N – 1)을 넣어 크기가 N인 수열로 만들었을 때, 임의의 정수 M을 찾는 프로그램을 작성하라.

입력

첫째줄에 수열의 크기 N(2 ≤ N ≤ 10,000,000)이 주어진다.

둘째줄에 수열 A의 원소인 N개의 정수가 주어진다. 입력으로 주어지는 정수는 모두 1부터 N – 1 사이의 정수이며 문제의 답인 M을 제외하고는 모두 서로 다른 정수이다.

출력

M을 출력하라.

예제 입력 1 

10
1 2 2 5 6 4 3 7 8 9

예제 출력 1 

2


1. 하나씩 다 해보면 됨

2. 큰순으로 출력

3. (W - 2) * (H - 2)  = 갈색 블록

4. W * 2 + (H - 2) = 레드 블록

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/2858
* BOJ 백준온라인져지 2858 기숙사 바닥 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1[] = br.readLine().split(" ");
int R = Integer.parseInt(str1[0]);
int B = Integer.parseInt(str1[1]);
int sum = R + B;
for (int i = 1; i < R; i++) {
for (int j = 1; j < R; j++) {
if (i * 2 + (j - 2) * 2 == R && (i - 2) * (j - 2) == B) {
System.out.println(j + " " + i);
return;
}
}
}
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

상근이는 기숙사 생활을 한다. 상근이의 방의 크기는 L*W 이다.

수업시간에 타일 채우기 경우의 수를 계산하던 상근이는 자신의 방도 1*1크기 타일로 채우려고 한다. 이 때, 가장자리는 빨간색으로, 나머지는 갈색으로 채우려고 한다.

아래 그림은 상근이의 방의 크기가 4*3일 때 이다.

어느날 상근이네 방에 하근이가 놀러왔다. 하근이는 아름다운 타일 배치에 감동받았다. 다시 방으로 돌아온 하근이는 빨간색과 갈색 타일의 개수는 기억했지만, 방의 크기는 기억해내지 못했다.

빨간색과 갈색 타일의 개수가 주어졌을 때, 상근이 방의 크기를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 빨간색 블럭의 수 R과 갈색 블럭의 B가 주어진다. (8 ≤ R ≤ 5000, 1 ≤ B ≤ 2,000,000)

출력

첫째 줄에 상근이네 방의 크기 L과 W을 공백으로 구분하여 출력한다. 만약, 두 수가 다르다면, 큰 수가 L이 되고 작은 수가 W이 된다. 항상 정답이 유일한 경우만 입력으로 주어진다.

예제 입력 1 

10 2

예제 출력 1 

4 3

힌트


1. 1개에서

2. 1 + 5개

3. 1 + 5 + 13

4. 각 사이가 (h - 1) * 4 만큼 차이난다.

5. 끝

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/9827
* BOJ 백준온라인져지 9827 아즈텍 피라미드 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int n = 1;
int h = 1;
int sum = 1;
while (sum <= N) {
n += h * 4;
h++;
sum += n;
}
bw.write(String.valueOf(h - 1));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

아즈텍의 황제 쿠이틀라우악은 자신의 명예를 위해 피라미드를 만드려고 한다.

아즈텍 피라미드는 돌 블럭을 이용해서 만든다. 블럭은 1×1×1 크기의 정육면체이다. 쿠이틀라우악은 피라미드의 설립식 때, 블럭 하나를 직접 땅에 놓았다. 그 다음 블럭부터는 인부들이 설치하며, 이전에 놓여진 블럭과 적어도 한 면 전체를 공유해야 한다.

왼쪽 두 개는 가능한 블럭의 배치, 오른쪽 세 개는 불가능한 배치이다.

블럭은 땅의 바로 위에 있거나, 블럭의 아래에 있는 블럭의 모든 면이 땅이나 다른 블럭과 접할 때, 안정적이라고 한다. 피라미드의 모든 블럭은 안정적이어야 한다.

아래 그림은 회색 블럭을 놓았을 때이며, 그 블럭이 안정적인 경우는 왼쪽 세 개, 아닌 경우는 오른쪽 두 개이다.

사용할 수 있는 블럭의 개수가 주어졌을 때, 그 블럭으로 만들 수 있는 가장 높은 안정적인 피라미드의 높이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 사용할 수 있는 블럭의 수 n이 주어진다. (1 ≤ n ≤ 109)

출력

첫째 줄에 블럭 n개로 만들 수 있는 가장 높은 안정적인 피라미드의 높이를 출력한다.

예제 입력 1 

6

예제 출력 1 

2

힌트


1. 0의 개수는 즉 10^C 랑 같다.

2. 반올림은 0~(10^C)/2 이면 내림, 아니면 올림해서 계산하면 된다.

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/2909
* BOJ 백준온라인져지 2909 캔디 구매 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1[] = br.readLine().split(" ");
int C = Integer.parseInt(str1[0]);
int K = Integer.parseInt(str1[1]);
int money = (int) Math.pow(10, K);
int result = C / money * money;
if (C % money >= money / 2) result += money;
bw.write(String.valueOf(result));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

오늘은 화이트데이이다. 상근이는 여자친구를 위해서 사탕을 사려고 한다. 하지만, 상근이는 독특한 성격을 가지고 있어서, 특정 액면가의 지폐만 가지고 있는다. 또, 거스름든은 받지 않는다. 따라서, 사탕 가게의 사장과 상근이는 다음과 같은 합의를 했다. 상근이는 사장에게 자신이 가지고 있는 지폐의 액면가를 말해준다. 그럼 사장은 상근이가 지불할 수 있는 가장 가까운 금액으로 사탕의 가격을 반올림해준다.

예를 들어, 상근이가 가지고 있는 지폐의 액면가가 100원이라고 하자. 만약 상근이가 고른 사탕의 가격이 150원이라면, 사장은 가격을 200원으로 반올림해서 상근이가 낼 수 있도록 해준다. 또, 가격이 149원이라면, 사장은 가격을 100원으로 반올림해서 상근이가 지불할 수 있도록 해준다.

상근이가 가지고 있는 지폐의 액면가는 항상 1, 10, 100, 1000, ..., 1,000,000,000 중 하나이다. 또, 지폐를 무한개 가지고 있다.

사탕 가격과 상근이가 가지고 있는 지폐의 액면가가 주어졌을 때, 사장은 가격을 얼마로 바꿔줄 것인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 사탕의 가격 C와 상근이가 가지고 있는 지폐의 액면가에 적혀있는 0의 개수 K가 주어진다. (0 ≤ C ≤ 1,000,000,000, 0 ≤ K ≤ 9)

출력

첫째 줄에 상근이가 내야하는 가격을 출력한다.

예제 입력 1 

184 1

예제 출력 1 

180

힌트


1. 경우의 수는 2개

2. 2개다 해보면됨 (완전탐색)

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/11943
* BOJ 백준온라인져지 11943 파일 옮기기 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1[] = br.readLine().split(" ");
String str2[] = br.readLine().split(" ");
int A1 = Integer.parseInt(str1[0]);
int A2 = Integer.parseInt(str2[0]);
int B1 = Integer.parseInt(str1[1]);
int B2 = Integer.parseInt(str2[1]);
bw.write(String.valueOf(Math.min(A1 + B2, A2 + B1)));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

두 개의 바구니에 사과와 오렌지가 있다. 첫 번째 바구니에는 사과 A개와 오렌지 B개가 있으며 두 번째 바구니에는 사과 C개와 오렌지 D개가 있다.

당신은 한 바구니에 있는 과일 하나를 집어서 다른 바구니로 옮길 수 있다. 이런 식으로 과일을 옮길 때, 한 바구니에는 사과만 있게 하고 다른 쪽에는 오렌지만 있게 하려고 한다.

앞서 말한 조건을 만족하도록 과일을 옮길 때, 과일을 옮기는 최소 횟수를 구하는 프로그램을 작성하여라.

입력

첫 번째 줄에는 첫 번째 바구니에 있는 사과와 오렌지의 수 A, B가 주어진다. (0 ≤ A, B ≤ 1,000)

두 번째 줄에는 두 번째 바구니에 있는 사과와 오렌지의 수 C, D가 주어진다. (0 ≤ C, D ≤ 1,000)

출력

사과와 오렌지를 옮기는 최소 횟수를 출력한다.


1. 상당히 쉬운 문제

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/2592
* BOJ 백준온라인져지 2592 대표값 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int arr[] = new int[1001];
int sum = 0;
for (int i = 0; i < 10; i++) {
int N = Integer.parseInt(br.readLine());
sum += N;
arr[N]++;
}
int max = 0;
int maxIdx = 0;
for (int i = 0; i < 1001; i++) {
if (max < arr[i]) {
max = arr[i];
maxIdx = i;
}
}
bw.write(sum / 10 + "\n");
bw.write(String.valueOf(maxIdx));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50의 평균은

이 된다.

평균 이외의 또 다른 대표값으로 최빈값이라는 것이 있다. 최빈값은 주어진 수들 가운데 가장 많이 나타나는 수이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50 이 주어질 경우,

30 이 세 번,

40 과 60 이 각각 두 번,

10, 20, 50 이 각각 한 번씩 나오므로, 최빈값은 30 이 된다.

열 개의 자연수가 주어질 때 이들의 평균과 최빈값을 구하는 프로그램을 작성하시오.

입력

첫째 줄부터 열 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 1,000 보다 작은 10 의 배수이다.

출력

첫째 줄에는 평균을 출력하고, 둘째 줄에는 최빈값을 출력한다. 최빈값이 둘 이상일 경우 그 중 하나만 출력한다. 평균과 최빈값은 모두 자연수이다.


1. 각 종류마다 K 로 나눈 몫을 합해준게 답

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/9550
* BOJ 백준온라인져지 9550 아이들은 사탕을 좋아해 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testcase = Integer.parseInt(br.readLine());
for (int i = 0; i < testcase; i++) {
String str1[] = br.readLine().split(" ");
int N = Integer.parseInt(str1[0]);
int K = Integer.parseInt(str1[1]);
String candies[] = br.readLine().split(" ");
int count = 0;
for (int j = 0; j < N; j++) {
count += Integer.parseInt(candies[j]) / K;
}
bw.write(count + "\n");
}
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

승택이의 아들이 생일을 맞았다. 승택이는 아들을 위해 생일 파티를 하려고 한다.

하지만 아들의 친구들을 모두 초대할 수는 없다. 아이들에게 나눠 줄 사탕이 부족하기 때문이다.

아이들은 항상 한 종류의 사탕만을 먹고 싶어한다. 게다가, 한 종류의 사탕을 최소한 K개 이상 먹어야만 행복해한다.

K가 주어지고 승택이가 현재 갖고 있는 사탕의 종류와 개수가 주어진다. 이 때, 생일파티에 올 수 있는 아이들은 최대 몇 명일까?

입력

첫 줄에 테스트 케이스의 수 T가 주어진다. ( 1 ≤ T ≤ 100 )

각 테스트 케이스의 첫 줄엔 승택이가 갖고 있는 사탕의 종류의 수 N과 K가 주어진다. ( 1 ≤ N, K ≤ 100 )

두번째 줄엔 N개의 정수로 승택이가 각 종류의 사탕을 몇 개 갖고 있는지가 주어진다.

모든 종류에 대해, 사탕은 최소 1개 최대 100개이다.

출력

각 테스트 케이스마다 생일파티에 최대 몇 명의 아이들이 참석할 수 있는지 하나의 정수로 출력한다.


1. 실수오차 조심

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/6986
* BOJ 백준온라인져지 6986 절사평균 풀이
*/
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main (String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1[] = br.readLine().split(" ");
int N = Integer.parseInt(str1[0]);
int K = Integer.parseInt(str1[1]);
double arr[] = new double[N];
for (int i = 0; i < N; i++) {
arr[i] = Double.parseDouble(br.readLine());
}
Arrays.sort(arr);
double sum = 0;
for (int i = 0; i + 2 * K < N; i++) {
sum += arr[i + K];
}
System.out.println(String.format("%.3g", sum / (N - 2 * K) + 1e-8));
sum += (arr[K] + arr[N - 1 - K]) * K;
System.out.println(String.format("%.3g", sum / N + 1e-8));
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

체조나 다이빙 등의 경기에서 일부 심판이 자기가 좋아하는 선수에게 높은 점수를, 싫어하는 선수에게 낮은 점수를 주는 경우가 종종 있었다. 따라서 심판들이 주는 점수의 평균점수를 선수에게 주게 되면 공정하지 않은 경우가 생길 수 있다. 이를 방지하기 위하여 절사평균이나 보정평균을 사용한다. 예를 들어 심사위원 일곱 명이 다음과 같이 점수를 주었다고 하자.

9.3, 9.5, 9.6, 9.8, 9.1, 5.0, 9.3

전체의 합이 61.6이 되므로 평균은 8.8이 된다. 이 평균점수는 한 심판이 다른 심판에 비하여 아주 낮은 점수인 5.0을 주어서 나온 결과로, 선수는 매우 불공정하다고 느낄 것이다.

위의 점수를 작은데서 큰 순서로 정렬하면 5.0, 9.1, 9.3, 9.3, 9.5, 9.6, 9.8 이 된다.

이때 절사평균(7, 2)는 정렬된 전체 점수 일곱 개 중 양쪽 끝에서 두 개씩을 제외하고 난 9.3, 9.3, 9.5의 평균인 9.37이 된다(소수점이하 셋째 자리에서 반올림). 또 보정평균(7, 2)는 정렬된 전체 점수 일곱 개 중 양쪽 끝에서 각각 두 개를, 남은 점수 중 가장 가까운 것으로 교체한 9.3, 9.3, 9.3, 9.3, 9.5, 9.5, 9.5의 평균으로 9.39가 된다(소수점이하 셋째 자리에서 반올림).

N개의 점수와 양쪽에서 제외하는 개수 K 값이 주어졌을 때 절사평균(N, K)와 보정평균(N, K)를 계산하는 프로그램을 작성하시오.

입력

첫째 줄에 전체 점수의 개수 N과 제외되는 점수의 개수 K가 빈칸을 사이에 두고 주어진다. N은 3 이상 100,000 이하의 자연수이다. K는 0 이상 (N/2)-1 이하로 주어진다. 그 다음 N줄에는 각 심판의 점수가 한 줄에 하나씩 주어진다. 점수는 0 이상 10 이하의 실수로 소수점이하 첫째 자리까지 주어진다.

출력

첫째 줄에 절사평균(N, K)를, 둘째 줄에 보정평균(N, K)를 각각 소수점이하 셋째 자리에서 반올림하여 둘째 자리까지 출력한다. 예를 들어 결과값이 9.667인 경우 9.67로, 5인 경우 5.00으로, 5.5인 경우에는 5.50으로 출력한다.


+ Recent posts