아이디어
- 분할 정복
🔑 배열의 원소를 다 더해서 하얀색 / 파란색 구분하기package boj_silver.p2630_색종이만들기;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Review1 {
static int[][] papers;
static int blue, white;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 색종이 입력받기
int N = Integer.parseInt(bf.readLine());
papers = new int[N][N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(bf.readLine());
for (int j = 0; j < N; j++) {
papers[i][j] = Integer.parseInt(st.nextToken());
}
}
//System.out.println(Arrays.deepToString(papers));
// (0,0)에서부터 size = N인 것부터 확인하기
divide(0,0, N);
System.out.println(white);
System.out.println(blue);
}
static void divide(int x, int y, int size){
int half = size / 2;
int nums = size * size; //파란색 종이 확인
int sum=0;
//원소 다 더하기 -> x, y부터 시작해서 size만큼 순회
for (int i = x; i<x+ size; i++) {
for (int j = y; j <y+ size; j++) {
sum += papers[i][j];
}
}
//다 더한값이 nums이면 전체가 blue인 종이
if (sum==nums){
blue++;
}else if (sum ==0){
white++;
}else{
//섞여있는 경우 -> 1,2,3,4사분면으로 분할
divide(x, y, half);
divide(x + half, y, half);
divide(x, y + half, half);
divide(x + half, y + half, half);
}
}
}
## 2. [프로그래머스 lv2.최솟값 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12941)
> **아이디어**
- 그리디로 -> 정렬 / 역정렬한다음 곱한 값이 가장 최소가 됨.
- 역정렬: Arrays.sort() 한다음 역순 순회
```java
class Solution{
public int solution(int []A, int []B){
//그리디로 풀 수 있나 -> A는 오름차순 정렬
//B를 내림차순 정렬
Arrays.sort(A);
Arrays.sort(B);
int sum = 0;
for (int i = 0; i< A.length; i++){
int res = A[i] * B[B.length-i-1];
sum += res;
}
return sum;
}//
}
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
boolean isFirst = true; // 단어의 첫 글자인지 체크
for (int i = 0; i<s.length(); i++){
char c = s.charAt(i);
if (c ==' '){//공백이 있으면 추가
sb.append(c);
isFirst = true;
}else{
if(isFirst){
sb.append(Character.toUpperCase(c));
isFirst = false;
}else{
sb.appned(Character.toLowerCase(c));
}
}
}//for
return sb.toString();