sooleeandtomas

[day30] 문자 떨어뜨리기 (c++) 본문

코딩테스트 알고리즘/기타

[day30] 문자 떨어뜨리기 (c++)

sooleeandtomas 2023. 3. 9. 01:24

🎊문제 

문자는 모두 바닥으로 떨어지고,  _는 모두 위로 쌓이도록 해주세요

 

[입력]

K _ _
_ _ C
_ _ _
A _ B

 


[출력]

_ _ _
_ _ _
K _ C
A _ B

 

🎊 첫번째 문제 해결 포인트

"_"와 "알파벳"이 쌓이는 순서를 각각 다르게 하자. "_": PUSH (뒤로 쌓이도록)
"알파벳": UNSHIFT (앞으로 쌓이도록)

공통:
- 우선 현재까지 쌓인 배열의 len를 찾아줘야 한다.

PUSH의 경우:
arr[arrIndex][len] = c;


UNSHIFT의 경우:
for(int i=len; i >= 0; i--){
    arr[arrIndex][i+1] = arr[arrIndex][i];
}


array의 모습은
[
 [_,_,K,A],
 [_,_,_,_],
 [_,_,C,B]
]
가 된다.

 

🎊 나의 첫번째 풀이

#include <iostream>
#include <array>
using namespace std;

char arr[3][4] = {""};

void unShift(char c, int arrIndex){
    int len = 0;
    for(int i = 0; i<4;i++){
        if(arr[arrIndex][i] == '\0'){
            len = i;
            break;
        }
    }
    
    for(int i=len; i >= 0; i--){
        arr[arrIndex][i+1] = arr[arrIndex][i];
    }
    arr[arrIndex][0] = c;
} 

void push(char c, int arrIndex){
    int len=0;
    for(int i =0; i<4;i++){
        if(arr[arrIndex][i] == '\0'){
            len = i;
            break;
        }
    }
    
    arr[arrIndex][len] = c;
}

int main() {
    char input[4][3] = {""};
    for(int i=0;i<4;i++){
        for(int j=0;j<3;j++){
            cin >> input[i][j];
        }
    }
    

    for(int x=0; x<3; x++){
        for(int y=0; y<4; y++){
            if(input[y][x] == '_'){
                push('_', x);
            }else{
                unShift(input[y][x], x);
            }
        }
    }

    for(int x=3; x>=0;x--){
        for(int y=0; y<3;y++){
            cout << arr[y][x];
        }
        cout << endl;
    }
    
    return 0;
}

 

Comments