강승현입니다
    • 홈
    • 태그
    • 방명록

    카테고리

    • 전체 글 (118)
      • 후기 (38)
        • 경험 (15)
        • SSAFY (9)
        • 코딩테스트 (3)
        • 넥스터즈 (6)
        • 회고 (5)
      • Degrees (2)
      • Tech (33)
      • OnlineJudge (45)
    OnlineJudge

    백준 2217 로프 풀이 python, java

    CODe_byCODe_·2021. 1. 20. 22:59

    문제로이동

     

    2217번: 로프

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

    www.acmicpc.net


    목차

       



      문제 설명

      그리디 문제는 규칙을 파악하는게 중요합니다.

      • 로프 여러개를 사용해 병렬로 무게를 들 수 있습니다.
        • 이 때, W/K(갯수) 만큼의 무게가 걸리게 됩니다.
        • 즉, {나를 포함한 나보다 무게가 큰 로프 수 * 내 로프 = 최종 무게}가 성립됩니다.
      1 5 3 2 4

      이렇게 입력되었다고 가정하면 이 Array를 정렬해 줍니다.

       

       

      5 4 3 2 1

      내림차순이 편하긴한데, 오름차순도 index 접근값만 바꿔주면 되기 때문에 크게 상관없습니다.

      자, 이제 각 Array에 (i+1)을 곱해줍니다.

       

      5 * 1 4 * 2 3 * 3 2 * 4 1 * 5

      이 Array중 최대값이 정답이 됩니다. 이 Array에서는 3*3인 9가 정답이겠네요.

      선택하자면 3, 4, 5 로프가 사용되었고 1, 2 로프는 사용되지 않았습니다.


      소스 코드

      두 언어 모두 같은 로직인데 정렬이 오름차순이냐 내림차순이냐의 차이로 index 접근 방법이 살짝 다릅니다.

      - 로프 값을 배열(list)로 입력받습니다.

      - 로프를 정렬합니다.(Python은 내림차순, Java는 오름차순)

      - 각 배열에 현재 index(크기 등수)를 곱해줍니다. (가장 큰 값은 1, 가장 작은 값은 n-1)

      - 그 값 중에서 가장 큰 값을 출력합니다.

      Python

      import sys
      input = sys.stdin.readline
      n = int(input())
      arr= list()
      for _ in range(n):
          arr.append(int(input()))
      arr.sort(reverse=True)
      for i in range(n):
          arr[i] = arr[i]*(i+1)
      print(max(arr))

      Java8

      import java.util.Arrays;
      import java.util.Scanner;
      
      public class Main {	
      	public static void main(String[] args) {
      		Scanner scan = new Scanner(System.in);
      		int n = scan.nextInt();
      		int[] arr = new int[n];
      		for(int i = 0 ; i<n;i++)
      			arr[i]=scan.nextInt();
      		Arrays.sort(arr, 0,n);
      		for(int i = n-1;i>=0;i--) {
      			arr[i] = arr[i]*(n-i);
      		}
      		Arrays.sort(arr, 0,n);
      		System.out.println(arr[n-1]);
      	}
      }
      
      반응형
      저작자표시 비영리 변경금지 (새창열림)
      'OnlineJudge' 카테고리의 다른 글
      • 백준 1002 터렛 풀이 python, java
      • 백준 2589 보물섬 풀이 python, java
      • 백준 10808 알파벳개수 풀이 python, java
      • 백준 17135 캐슬디펜스 풀이 python, java
      CODe_
      CODe_
      개발과 관련된 다양한 정보를 몰입감있게 전달합니다.
      최신 글

      티스토리툴바