https://www.acmicpc.net/problem/2217
C
#include <stdio.h>
#include <stdlib.h>
int compare(const void* first, const void* second) {
if (*(int*)first < *(int*)second)
return -1;
else if (*(int*)first > *(int*)second)
return 1;
else
return 0;
}
int main() {
int n; //줄 갯수
int w[100001]; //로프 마다 중량
int kw=0; //최대 중량
scanf("%d", &n); //로프 갯수
for (int i = 0; i < n; i++) {
scanf("%d", &w[i]); //로프마다의 중량 입력
}
qsort(w, n, sizeof(int), compare); // 중량을 오름차순 정렬
for (int i = 0; i < n; i++) {
if (kw < w[i] * (n - i)) //현재 i로프의 최대 중량 * 현재 로프 수
kw = w[i] * (n - i);
}
printf("%d", kw);
return 0;
}
java
Scanner 대신 BufferedReader 사용하기! 훨씬 더 복잡해보이지만 속도 측면에서 scanner보다 우위에 있어 BufferedReader 사용을 습관화하는 것이 좋다고 한다.
package javastd1;
import java.io.BufferedReader;
import java.util.Arrays;
import java.io.InputStreamReader;
import java.io.IOException;
public class bj2217 {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 로프 개수
int kw=0; // 최대 중량
int [] w = new int[n]; //로프마다의 중량 저장할 배열 선언
for(int i=0; i<n; i++) {
w[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(w); //중량을 오름차순 정렬
for (int i = 0; i < n; i++) {
if (kw < w[i] * (n - i)) //현재 i로프의 최대 중량 * 현재 로프 수
kw = w[i] * (n - i);
}
System.out.println(kw); //최대 중량 출력
}
}
'공부하자 > 알고리즘' 카테고리의 다른 글
[백준] 3009번 네 번째 점 C, java (0) | 2022.01.08 |
---|---|
[백준] 1085번 직사각형에서 탈출 C, java (0) | 2022.01.07 |
[백준] 10162번 전자레인지 C, java (0) | 2022.01.05 |
[백준] 5585번 거스름돈 C, java (0) | 2022.01.04 |
[백준] 1026번 보물 C, java (0) | 2021.12.30 |