티스토리 뷰

카테고리 없음

1338 문자삼각형1 (정올)

rectified 2024. 12. 23. 17:20

풀이과정

처리조건 기본 format:

    for (int i = 1; i <= n; i++){
        for (int j = i, k = n; j <= n; j++, k--){
            
        }
    }

 

2번과 3번 조건을 만족하기 위해 뒤에 들어가는 루프는 j를 i부터 n까지 설정하고 더하고 k를 빼줌으로써 문제에서 요구한 모양으로 일단 배열을 알파벳으로 채움.

(1, 5) (2, 4) (3, 3) (4, 2) (5, 1) (2, 5) (3, 4) (4, 3) (5, 2) (3, 5) (4, 4) (5, 3) (4, 5) (5, 4) (5, 5) 순서로 채워야함. 

 

출력과정

여기가 좀 어려웠는데, 

이중포문으로 j = i 부터 n - 1까지 돌면서 먼저 공백들을 채워주고 (아니면 공백이 없어서 출력이 ABCDE가 다 왼쪽에 붙어나옴) 

j = 1 부터 n까지 돌면서 null 값이 아니면 출력을 해야함.(2차원 배열 모두 '\0' null로 처음에 지정함.)

 

처음에는 그냥 루프 2개로 출력하는건줄 알고 출력하다가 루프 2개로는 원하는모양 나오지 않는다는걸 확인.

 

코드

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

int main(){
    int n;
    vector<vector<char>> arr(101, vector<char>(101, '\0'));
    cin >> n;
    char alpha = 'A';

    
    for (int i = 1; i <= n; i++){
        for (int j = i, k = n; j <= n; j++, k--){
            arr[j][k] = alpha++;
            if (alpha > 'Z'){
                alpha = 'A';
            }
        }
    }
    for (int i = 1; i <= n; i++){
        for (int j = i; j < n; j++){
            cout << "  ";
        }
        for (int j = 1; j <= n; j++){
            if (arr[i][j] != '\0'){
                //cout << i << " ";
                //cout << j << " ";
                cout << arr[i][j] << " ";
            }
        }cout << '\n';
        
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함