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

[백준] 1026번 보물 C, java

by snbrin 2021. 12. 30.

c언어로 풀고 java로 바꾸기!!

 

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

 

1026번: 보물

첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거

www.acmicpc.net

 

C

#include <stdio.h>

int main() {

	int n,i,j,temp,AB = 0;
	int arrA[50];
	int arrB[50];

	scanf("%d", &n);
	
	for (i=0; i<n; i++) 
		scanf("%d", &arrA[i]);
	for (i=0; i<n; i++)
		scanf("%d", &arrB[i]);


	//배열A 내림차순 정렬
	for (i = 0; i < n-1; i++) {
		for (j = 0; j < n - (1 + i); j++) {
			if (arrA[j] < arrA[j + 1]) {
				temp = arrA[j];
				arrA[j] = arrA[j + 1];
				arrA[j + 1] = temp;
			}
		}
	}

	//배열B 오름차순 정렬
	for (i = 0; i < n - 1; i++) {
		for (j = 0; j < n - (1 + i); j++) {
			if (arrB[j] > arrB[j + 1]) {
				temp = arrB[j];
				arrB[j] = arrB[j + 1];
				arrB[j + 1] = temp;
			}
		}
	}

	//배열 곱
	for (i = 0; i < n; i++) {
		AB += arrA[i] * arrB[i];
	}

	printf("%d", AB);

}

 

java for문 사용

package javastd1;

import java.util.Scanner;


public class bj1026 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan = new Scanner(System.in);
		
		int[] arrA = new int[50];
		int[] arrB = new int[50];
		int n,i,j,temp,AB = 0;
		
		n = scan.nextInt();
		
		for (i=0; i<n; i++) 
			arrA[i] = scan.nextInt();
		for (i=0; i<n; i++)
			arrB[i] = scan.nextInt();
		
		//배열A 내림차순 정렬
		for (i = 0; i < n-1; i++) {
			for (j = 0; j < n - (1 + i); j++) {
				if (arrA[j] < arrA[j + 1]) {
					temp = arrA[j];
					arrA[j] = arrA[j + 1];
					arrA[j + 1] = temp;
				}
			}
		}

		//배열B 오름차순 정렬
		for (i = 0; i < n - 1; i++) {
			for (j = 0; j < n - (1 + i); j++) {
				if (arrB[j] > arrB[j + 1]) {
					temp = arrB[j];
					arrB[j] = arrB[j + 1];
					arrB[j + 1] = temp;
				}
			}
		}

		//배열 곱
		for (i = 0; i < n; i++) {
			AB += arrA[i] * arrB[i];
		}

		
		System.out.println(AB);
		
		scan.close();
		
	}

}

 

java sort 사용

package javastd1;

import java.util.Arrays;
import java.util.Scanner;

public class bj1026sort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan = new Scanner(System.in);
		
		int n = scan.nextInt();
		
		int AB=0;
		int[] arrA = new int[n];
		int[] arrB = new int[n];
		
		
		for (int i=0; i<n; i++) 
			arrA[i] = scan.nextInt();
		for (int i=0; i<n; i++)
			arrB[i] = scan.nextInt();
		
		scan.close();
		
		Arrays.sort(arrA);
		Arrays.sort(arrB);
		
		
		//배열 곱
		for (int i = 0; i < n; i++) {
			AB += arrA[i] * arrB[n-1-i];
		}

		
		System.out.println(AB);
		
		
	}

}

 

for문 사용 버전처럼 n을 앞에 선언할 때 0을 대입해놓고 scan으로 n값을 다시 받으면 결과가 제대로 안나옴 왜지?

n을 선언과 동시에 scan하면 정답이 나온다.