[코테 매일 풀기 2일차] 1024

HAHAING·2025년 10월 24일

코딩 테스트

목록 보기
11/30
post-thumbnail

1. 백준 2630 색종이 만들기

아이디어

  • 분할 정복
    🔑 배열의 원소를 다 더해서 하얀색 / 파란색 구분하기
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; 
    }//
    
}

3. 프로그래머스 lv2.JadenCase 문자열 만들기

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(); 
profile
따뜻한 시선으로 세상을 변화시키는 데이터사이언티스트

0개의 댓글