ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2441, 2442, 2445, 2446, 2522, 10991, 10992
    쾌락없는 책임 (공부)/알고리즘 문제풀이 2020. 12. 27. 15:21
    반응형

    <2441 - www.acmicpc.net/problem/2441>

    #include <iostream>
    using namespace std;
    int main(){
        int n;
        cin >> n;
        // i 층에 있어야 할 것 i-1만큼의 공백 후 n-i+1만큼의 별
        for(int i = 0; i < n; i++){
            for(int j = 0; j < i; j++)
                cout << " ";
            for(int j = 0; j < n-i; j++)
                cout << "*";
            cout << endl;
        }
    }
    

    <2442 - www.acmicpc.net/problem/2442>

    #include <iostream>
    using namespace std;
    int main(){
        int n;
        cin >> n;
        // i 층에 있어야 할 것 i-1만큼의 공백 후 
        // 1층의 경우 공백 4개 후 별 1개 후 공백 4개
        // 2층의 경우 공백 3개 후 별 3개 후 공백 3개
        for(int i = 1; i < n+1; i++){
            for(int j = 0; j < n-i; j++)
                cout << " ";
            for(int j = 0; j < 2*i-1; j++)
                cout << "*";
            cout << endl;
        }
    }

    - 처음 만든건 별 후에 나오는 공백도 출력을 했는데 그럴 필요는 없다고 한다.


    <2445 - www.acmicpc.net/problem/2445>

    #include <iostream>
    using namespace std;
    int main(){
        int n;
        cin >> n;
        // 1층에 있는것 1개의 별 후 7개의 공백 후 1개의 별
        // 4층에 있는것 4개의 별 후 2개의 공백 후 4개의 별
        // 공백은 2n -2i만큼
        for(int i = 1; i < n+1; i++){
            for(int j = 0; j < i; j++)
                cout << "*";
            for(int j = 0; j < 2*(n-i); j++)
                cout << " ";
            for(int j = 0; j < i; j++)
                cout << "*";
            cout << endl;
        }
        for(int i = 1; i < n; i++){
            for(int j = 0; j < n-i; j++)
                cout << "*";
            for(int j = 0; j < 2*i; j++)
                cout << " ";
            for(int j = 0; j < n-i; j++)
                cout << "*";
            cout << endl;
    
        }
        // n+1층에 있는 것, 
        // 5+1 = 4 / 5+2 = 3 / 5+3 = 2
        // 2n-1층까지 있음
    }

    - 이게 정말 맞는걸까?

    - for문이 너무 많아서 조금 안좋아보인다


    <2446 - www.acmicpc.net/problem/2446>

    #include <iostream>
    using namespace std;
    int main(){
        int n;
        cin >> n;
        for(int i = 1; i < n+1; i++){
            for(int j = 1; j < i; j++)
                cout << " ";
            for(int j = 0; j < 2*(n-i)+1; j++)
                cout << "*";
            cout << endl;
        }    
        for(int i = 1; i < n; i++){
            for(int j = 1; j < n-i; j++)
                cout << " ";
            for(int j = 0; j < 2 * i +1; j++)
                cout << "*";
            cout << endl;
        }
    }

    <2522 - www.acmicpc.net/problem/2522>

    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        for(int i = 1; i < n+1; i++){
            for(int j = 0; j < n-i; j++)
                cout << " ";
            for(int j = 0; j < i; j++)
                cout << "*";
            cout << endl;
        }
        for(int i = 1; i < n; i++){
            for(int j = 0; j < i; j++)
                cout << " ";
            for(int j = 0; j < n-i; j++)
                cout << "*";
            cout << endl;
        }
    }

    <10991 - www.acmicpc.net/problem/10991>

    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        for(int i = 1; i <= n; i++){
            for(int j = i; j <= n-1; j++)
                cout << " ";
            for(int j = 1; j <= 2*i-1; j++){
                if(j % 2 == 1)
                    cout << "*";
                else
                    cout << " ";  
            }
            cout << endl;
        }
    }
    

    - 시간 좀 걸린 문제

    - 규칙을 찾는건 쉬웠지만 잡생각이 많아 띄어쓰기 제어를 잘 못했음


    <10992 - www.acmicpc.net/problem/10992>

    #include <iostream>
    using namespace std;
    int main() {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++){
            for(int j = 0; j < n-i; j++)
                cout << " ";
            if(i == 1)
                cout << "*";
            else if(i == n){
                for (int k = 0; k < 2*n-1; k++)
                    cout << "*";
            }
            else{
                cout << "*";
                for(int k = 0; k < 2*i-3; k++)
                    cout << " ";
                cout << "*";
            }
            cout << endl;
        }
    }

    - 이전 문제 푸니깐 좀 쉬운편

    - '공백'에 초점을 맞추는게 중요

    - 위 아래는 규칙이 아닌 조건으로 인한 출력이라 생각하자

    반응형

    댓글

Designed by Tistory.