영원히 흘러가는 강

백준 알고리즘 브루트 포스 본문

알고리즘

백준 알고리즘 브루트 포스

double_R_one_G 2020. 10. 8. 17:43
728x90

2798 블랙잭

 

3개 조합으로 입력받은수에 근접 but 입력수 보다 커서는 안됨

 

import java.util.Scanner;

public class main2 {

	  public static void main(String[] args) {
	        Scanner sc = new Scanner(System.in);
	        
	        int x=sc.nextInt();  // 입력 개수
	        int y=sc.nextInt();  // 근처의 수
	        int sum=0;
	        int max=0;
	        int[] arr=new int[x];
	        
	        for(int z=0;z<x;z++) {
	        	arr[z]= sc.nextInt();
	        }
	        
	        
	        for(int i=0;i<x-2;i++) {
	        	for(int j=i+1;j<x-1;j++) {
	        		for(int k=j+1;k<x;k++) {
	        			sum=arr[i]+arr[j]+arr[k];
	        		
	        			if(sum==y) {
	        				max=sum;
	        				break;
	        			}
	        			if (sum<y){
	        				  max = Math.max(max , sum);
	        			}
	        			
	        		}
	        	}
	        }
	      System.out.println(max);
}}

 

for 3개 중첩에서 k에서 i+2로 했었는데 j+1 로 변경하니 됨...

 

 

 

------------------------------------------2020/10/13------------------------------------------

 

 

 

2231 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다.

 

어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.

 

따라서 245는 256의 생성자가 된다.

 

물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

 

 

import java.util.Scanner;

public class main {
	 	
	  public static void main(String[] args) {
	
		  Scanner sc=new Scanner(System.in);
		  int x=sc.nextInt();
		  int z=0;
		  
		  for(int i=1;i<=x;i++) {
			  int bunhae=bunhae(i);
			  if(x==i+bunhae) {  // 분해합 값이 입력받은 값과 같으면 break
				z=i;
				 break;
			  }
		  }
		  System.out.println(z);
	  }

	private static int bunhae(int i) {     //분해합 계속 돌리기 
		
		int sum=0;
		while(i>0) {
			sum+=i%10;
			i=i/10;
		}
		return sum;
	}
	  }

알고리즘은 바로 구상했으나 구현상 시간 오래 걸림

 

 

 

 

 

 

7568. 덩치

첫 줄에는 전체 사람의 수 N이 주어진다. 그리고 이어지는 N개의 줄에는 각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 나타난다. 단, 2 ≤ N ≤ 50, 10 ≤ x,y ≤ 200 이다.

 

 

import java.util.Scanner;

public class main {
	 	
	  public static void main(String[] args) {
	
		  Scanner sc=new Scanner(System.in);
		  int x=sc.nextInt();              //입력 수
		  int arr[][]=new int [x][2];      // 키,몸무게
		  int rank[]=new int[x];
		  
		  for(int i=0;i<x;i++) {
			 rank[i]=1;
			 arr[i][0]=sc.nextInt();
			 arr[i][1]=sc.nextInt();
		  }
		  
		  for(int i=0;i<x;i++) {
			  for(int j=0;j<x;j++) {
				  if(arr[i][0]>arr[j][0] && arr[i][1]>arr[j][1]) {
					  rank[j]++;
				  }
			  }
		  }
		  for(int i=0;i<x;i++) {
			  System.out.println(rank[i]+"  ");
		  }
	}
	  }


728x90

'알고리즘' 카테고리의 다른 글

알고리즘에 자주 사용되는  (0) 2020.10.19
백준 알고리즘 스택  (0) 2020.10.14
백준 알고리즘 재귀  (0) 2020.10.08
백준 알고리즘  (0) 2020.10.07
코드업 100제 (1096~1099)  (0) 2020.09.28
Comments