Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공부함

알고리즘 문제 풀어보기 - 백준 #1026번: 보물 (JAVA) 본문

알고리즘/백준

알고리즘 문제 풀어보기 - 백준 #1026번: 보물 (JAVA)

bassy 2022. 1. 11. 22:41

 

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

 

1026번: 보물

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

www.acmicpc.net

 

 

'B에 있는 수는 재배열하면 안 된다.'

라는 조건을 빼먹고 

 

1. A는 오름차순으로

2. B는 내림차순으로 정렬후 둘을 비교

3. 각 요소끼리 곱하기

했는데

 

정답 처리가 되었다.

이게 맞나? B를 재배열 하는 것인데?

질문 검색에서 찾아보니 딱히 문제는 없다고들 하지만 찝찝하다.

알고리즘 문제풀이 실력이 늘면 없이도 가능하게 다시 풀어보는걸로..

 

import java.util.Scanner;

public class Treasure_1026 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int n= scanner.nextInt();
		
		int[] A= new int[n];
		int[] B= new int[n];
		
		for(int i=0;i<n;i++) {
			A[i]=scanner.nextInt();
		}
		
		for (int j=0;j<n;j++) {
			B[j]=scanner.nextInt();
		}
		
		int min=0;
		int index=0;
		int temp=0;
		for (int k=0;k<n;k++) {
			min=101;
			for(int h=k;h<n;h++) {
				if(min>A[h]) {
					min=A[h];
					index=h;
				}
			}
			temp=A[k];
			A[k]=A[index];
			A[index]=temp;		
		}
		
		int max=0;
		for (int q=0;q<n;q++) {
			max=-1;
			for(int w=q;w<n;w++) {
				if(max<B[w]) {
					max=B[w];
					index=w;
				}
			}
			temp=B[q];
			B[q]=B[index];
			B[index]=temp;		
		}
		
		int[] result=new int[n];
		int count=0;
		for(int t=0;t<n;t++) {
			result[t]=A[t]*B[t];
			count+=result[t];
		}
		System.out.println(count);
	}
}

 

느낀점: 정렬 알고리즘을 대충 알긴 하는데 뭐를 언제 써야할지 잘 모르겠다.

정렬 알고리즘 공부를 다시 하고 문제를 풀면서 외워야겠다.