๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 10703๋ฒˆ - ์œ ์„ฑ

by ์•ˆ์ฃผํ˜• 2022. 9. 21.

๋ฌธ์ œ

 

10703๋ฒˆ: ์œ ์„ฑ

์ž‘๊ณ  ํŠน์ดํ•œ ๋ชจ์–‘์˜ ์œ ์„ฑ ์‚ฌ์ง„์ด ์ธํ„ฐ๋„ท์— ์˜ฌ๋ผ์™”๋‹ค. ์‚ฌ์ง„์—๋Š” ๋งค์šฐ ๋†’์€ ๊ณณ์—์„œ ๋–จ์–ด์ง€๊ณ  ์žˆ๋Š” ์œ ์„ฑ์ด ํ—ˆ๊ณต์— ์ฐํ˜€ ์žˆ์—ˆ๋‹ค. ์œ ์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ๋‚œ ๋’ค์˜ ์‚ฌ์ง„๋„ ์žˆ์—ˆ์ง€๋งŒ ์•ˆํƒ€๊น๊ฒŒ๋„ ์†Œ์‹ค๋ผ๋ฒ„๋ ค

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
using namespace std;

int N, M;

char map[3001][3001];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>N>>M;;
    for(int i=0; i<N; i++){
        string inp; cin>>inp;
        for(int k=0; k<M; k++){
            map[i][k] = inp[k];
        }
    }
    
    int move_cnt = 1e9;
    for(int i=0; i<M; i++){ // ๋ช‡ ์นธ ์ด๋™ํ• ์ง€ ์ฐพ๊ธฐ
        int meteor = 0;
        int ground = 0;
        for(int k=0; k<N; k++){
            if(map[k][i] == 'X') meteor = k + 1;
            if(map[k][i] == '#'){
                ground = k + 1;
                break;
            }
        }
        if(meteor !=0 && ground != 0){
            move_cnt = min(move_cnt, ground - meteor - 1);
        }
    }
    
    for(int i=0; i<M; i++){ // ์œ ์„ฑ ์ด๋™
        for(int k=N-1; k>=0; k--){
            if(map[k][i] == 'X'){
                map[k+move_cnt][i] = 'X';
                map[k][i] = '.';
            }
        }
    }
    for(int i=0; i<N; i++){ // ์ถœ๋ ฅ
        for(int k=0; k<M; k++){
            cout<<map[i][k];
        }
        cout<<'\n';
    }
}

 

ํ’€์ด

๋ฌธ์ œ๋ฅผ ๋จผ์ € ์ดํ•ดํ•ด ๋ณด์ž๋ฉด ์™ผ์ชฝ ์ž…๋ ฅ์—์„œ x(์œ ์„ฑ) ๋ญ‰ํ……์ด๋ฅผ ๋•…(#) ์œ„๊นŒ์ง€ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ตœ๋Œ€ํ•œ ๋‚ด๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋•…์— ๊ทผ์ ‘ํ•œ X(์œ ์„ฑ)์„ ์ฐพ์•„์„œ ํ•ด๋‹น ์œ ์„ฑ๊ณผ ๋•…๊ณผ์˜ ๊ฑฐ๋ฆฌ๋งŒํผ ์ „์ฒด ์œ ์„ฑ์„ ๋‚ด๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ž…๋ ฅ ๊ฐ™์€ ๊ฒฝ์šฐ (1, 3)์˜ ์œ ์„ฑ๊ณผ (3, 3)์˜ ๋•…๊ณผ์˜ ๊ฑฐ๋ฆฌ์ฐจ๊ฐ€ ์ œ์ผ ์ž‘๊ณ , ๊ฑฐ๋ฆฌ ์ฐจ์ด๋Š” ํ•œ ์นธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ์œ ์„ฑ์„ ์•„๋ž˜๋กœ ํ•œ ์นธ ๋‚ด๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€