개요 백준 문제 2448번을 풀면서 어려웠던 점과 코드를 정리한다. 소요 시간 : 150분https://www.acmicpc.net/problem/2448
문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 * * * ***** * * * * * * ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * ***** ***** ***** ***** * * * * * * * * * * * * * * * * * * * * * * * * ***** ***** ***** ***** ***** ***** ***** *****
코드 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #include <iostream> using namespace std; char star[3072][6144]; int N; void printStarResult() { for(int i=0;i<N;i++) { for(int j=0;j<N*2-1;j++) { cout << star[i][j]; } cout << "\n"; } } void printStar(int height,int x,int y) { if(height == 3) { star[y][x] = '*'; star[y+1][x-1] = '*'; star[y+1][x+1] = '*'; star[y+2][x-2] = '*'; star[y+2][x-1] = '*'; star[y+2][x] = '*'; star[y+2][x+1] = '*'; star[y+2][x+2] = '*'; //printStarResult(); return; } printStar(height/2,x,y); printStar(height/2,x-(height/2),y+(height/2)); printStar(height/2,x+(height/2),y+(height/2)); } void solve() { cin >> N; for(int i=0;i<N;++i) { for (int j = 0; j < 2* N; ++j) { if(j==2 * N -1) { star[i][j] = '\0'; } else { star[i][j] = ' '; } } } printStar(N,N-1,0); printStarResult(); } int main() { solve(); }
풀이 분할정복임을 알고 접근하면 큰 삼각형부터 작은 삼각형까지 분할해 나가서 가장 작은 삼각형에서부터 별을 출력하면 되는 문제 가장 작은 삼각형이 아닌 한개의 별을 출력하려고 하니 규칙이 너무 많았고 2시간이 초과되어 포기한 문제 알고보니 삼각형을 중점적으로 분할하여 보면 보이는 문제였음.
배울 점, 메모 아직 규칙을 찾는다던지 접근방식, 처음에 알고리즘을 풀기위해 떠올린 아이디어가 잘 맞지않는다. 풀이보고 약간 벽느껴졌음,,더 열심히 해야겠음