[백준 1026번 문제, JAVA] 보물

2023. 3. 2. 18:54·정리 전 게시글/공부 관련

문제

 

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] input = br.readLine().split(" ");

        // A 배열을 입력받는다
        List<Integer> aList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            aList.add(Integer.parseInt(input[i]));
        }
        // A 배열을 정렬한다
        Collections.sort(aList);

        // B 배열을 입력받는다
        input = br.readLine().split(" ");
        List<Integer> bList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            bList.add(Integer.parseInt(input[i]));
        }

        // 임시로 A 배열을 저장할 C 배열을 만든다
        int[] cArray = new int[n];
        for (int i = 0; i < n; i++) {
            // B 배열에서 최대값을 받는다
            Integer max = Collections.max(bList);
            // 최대값의 인덱스를 받는다
            int index = bList.lastIndexOf(max);
            // 최대값 인덱스에 A 배열의 순서대로 값을 넣는다
            cArray[index] = aList.get(i);
            // B 배열에서 최대값을 제거한다
            bList.set(index, -1);
        }

        // B 리스트를 다시 원래대로 만든다
        for (int i = 0; i < n; i++) {
            bList.set(i, Integer.parseInt(input[i]));
        }

        // 최소값을 만든다
        int answer = 0;
        for (int i = 0; i < n; i++) {
            answer += cArray[i] * bList.get(i);
        }

        System.out.println(answer);
    }
}

해결

A배열과 B배열을 모두 재배열 가능하면 더 쉽게 풀 수 있었겠지만 B는 재배열 하면 안된다는 양심의 규칙이 있다

사실 출력 결과만 보기 때문에 양심을 어겨도 괜찮은 사람은 A와 B를 모두 내림차순과 오름차순 각각 정렬해서

해당 함수의 정의대로 합을 구하면 될거다

 

A배열은 정렬을 하고 B배열의 최대값을 저장하고 그걸 다른 배열에 저장하면 A배열을 B배열에 따라서 저장이 가능하다


참고

링크

 

 

 

저작자표시 (새창열림)

'정리 전 게시글 > 공부 관련' 카테고리의 다른 글

윤년 구하는 함수  (0) 2023.03.03
[백준 1094번 문제, JAVA] 막대기  (1) 2023.03.03
[JAVA 자바] 숫자 자릿수 구하는 코드 방법 2가지 n번째 숫자 구하기  (0) 2023.03.01
자바 TCP/IP 소켓 통신 서버, 클라이언트 만들기 코드  (0) 2023.03.01
[백준 1027번 문제, JAVA] 고층 건물  (0) 2023.02.28
'정리 전 게시글/공부 관련' 카테고리의 다른 글
  • 윤년 구하는 함수
  • [백준 1094번 문제, JAVA] 막대기
  • [JAVA 자바] 숫자 자릿수 구하는 코드 방법 2가지 n번째 숫자 구하기
  • 자바 TCP/IP 소켓 통신 서버, 클라이언트 만들기 코드
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (277)
      • f1tenth (2)
      • 개발 관련 아무거나 (1)
      • 정리 전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    마크스크립트
    캡스톤디자인
    컨텍스트스위칭
    안드로이드
    프로그래머스PCCE
    이것이자바다확인문제
    반복하지않는수
    티스토리스킨편집
    마인크래프트
    마인크래프트스크립트
    티스토리HTML
    일본규슈공업대학교
    c언어초보
    프로그래머스
    마크
    마인크래프트강화스크립트
    이것이자바다
    티스토리반응형2스킨편집
    공개SW개발자대회
    이것이자바다연습문제
    자바
    백준
    빅데이터공모전
    파이어베이스
    C++강좌
    스크롤바CSS
    파이썬
    콜라츠추측
    C언어강좌
    C언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[백준 1026번 문제, JAVA] 보물
상단으로

티스토리툴바