πŸ“– [λ°±μ€€μ•Œκ³ λ¦¬μ¦˜ 풀이] Q.1138 ν•œ μ€„λ‘œ μ„œκΈ° 문제 풀이

πŸ“– 문제

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

Nλͺ…μ˜ μ‚¬λžŒλ“€μ€ 맀일 μ•„μΉ¨ ν•œ μ€„λ‘œ μ„ λ‹€. 이 μ‚¬λžŒλ“€μ€ 자리λ₯Ό λ§ˆμŒλŒ€λ‘œ μ„œμ§€ λͺ»ν•˜κ³  μ˜€λ―Όμ‹μ˜ μ§€μ‹œλŒ€λ‘œ μ„ λ‹€.

μ–΄λŠ λ‚  μ‚¬λžŒλ“€μ€ μ˜€λ―Όμ‹μ΄ μ‚¬λžŒλ“€μ΄ 쀄 μ„œλŠ” μœ„μΉ˜λ₯Ό 기둝해 λ†“λŠ”λ‹€λŠ” 것을 μ•Œμ•˜λ‹€. 그리고 아침에 μžκΈ°κ°€ 기둝해 놓은 것과

μ‚¬λžŒλ“€μ΄ 쀄을 μ„  μœ„μΉ˜κ°€ λ§žλŠ”μ§€ ν™•μΈν•œλ‹€.

μ‚¬λžŒλ“€μ€ μžκΈ°λ³΄λ‹€ 큰 μ‚¬λžŒμ΄ μ™Όμͺ½μ— λͺ‡ λͺ… μžˆμ—ˆλŠ”μ§€λ§Œμ„ κΈ°μ–΅ν•œλ‹€. Nλͺ…μ˜ μ‚¬λžŒμ΄ 있고, μ‚¬λžŒλ“€μ˜ ν‚€λŠ” 1λΆ€ν„° NκΉŒμ§€ λͺ¨λ‘ λ‹€λ₯΄λ‹€.

각 μ‚¬λžŒλ“€μ΄ κΈ°μ–΅ν•˜λŠ” 정보가 μ£Όμ–΄μ§ˆ λ•Œ, 쀄을 μ–΄λ–»κ²Œ μ„œμ•Ό ν•˜λŠ”μ§€ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ” 접근법

BOJ Q.1138 ν•œ μ€„λ‘œ μ„œκΈ° λ¬Έμ œμž…λ‹ˆλ‹€.

μ‚¬λžŒλ“€μ€ 각자 μžμ‹ μ˜ 큰 μ‚¬λžŒμ΄ μ™Όμͺ½μ— λͺ‡λͺ… μžˆλŠ”μ§€λ§Œμ„ μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

이 μ •λ³΄λŠ” ν‚€κ°€ μž‘μ€ μˆœμ„œλΆ€ν„° μ£Όμ–΄μ§‘λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ μžμ‹ μ˜ μ™Όμͺ½μ— 킀큰 μ‚¬λžŒμ΄ μžˆλŠ” 수만큼의 μžλ¦¬λ§Œμ„ λΉ„μ›Œλ‘κ³  

μžλ¦¬μ— λ°°μΉ˜ν•˜λ©΄ λ©λ‹ˆλ‹€. 

Nλͺ…μ˜ 수만큼 자리λ₯Ό λ§Œλ“€μ–΄λ‘κ³ 
   
μž‘μ€ ν‚€μ˜ μ‚¬λžŒλΆ€ν„° μˆœμ„œλŒ€λ‘œ μžμ‹ λ³΄λ‹€ 큰 μ‚¬λžŒμ΄ 배치 될 수만큼의 자리만

λΉ„μ›Œλ‘λ©΄ λ©λ‹ˆλ‹€.

μžμ‹ λ³΄λ‹€ 큰 μ‚¬λžŒμ˜ 수 만큼 자리λ₯Ό λΉ„μš°κ³  μžμ‹ μ΄ μœ„μΉ˜ν•  곳에 아무도 μ•‰μ•„μžˆμ§€ μ•ŠλŠ”

μžλ¦¬μ— 배치λ₯Ό ν•˜λ©΄ λ©λ‹ˆλ‹€.  

πŸ’» μ½”λ“œ


package problem.greedy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Main_1138 {

    static int N;
    static int[] info;
    static int[] order;

    public static void main(String[] args) throws IOException {
        input();
        solve();
        for(int i=0; i<order.length; i++){
            System.out.print(order[i]+" ");
        }
    }

    public static void solve(){
        for(int i=0; i<info.length;){
            int num = info[i];
            int c = 0;
            for(int j=0; j<order.length; j++){
                boolean check = false;
                if(c==num){
                    for(int k=j; k< info.length; k++) {
                        if(order[k]==0){
                            order[k] = (++i);
                            c=0;
                            check = true;
                            break;
                        }
                    }
                }
                if(order[j] == 0){
                    c++;
                }
                if(check)
                    break;
            }
        }
    }

    public static void input() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        info = new int[N];
        order = new int[N];
        String temp[] = br.readLine().split(" ");
        for(int i=0; i<temp.length; i++){
            info[i] = Integer.parseInt(temp[i]);
        }
        br.close();
    }

}


Written on November 30, 2020