본문 바로가기
공부하자/알고리즘

[백준] 2217번 로프 C, java

by snbrin 2022. 1. 6.

https://www.acmicpc.net/problem/2217

 

2217번: 로프

N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하

www.acmicpc.net

 

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); 	//최대 중량 출력
	}

}