새롭게 시작한 알고리즘 강의에서 추천해준 연습용 별찍기 문제를 풀던 중, 속이 비어있는 삼각형을 출력하는 문제를 만났다.
처음에는 뭔가 간단히 끝낼 수 있을것 같은 느낌이 들어서 이것저것 시도해봤는데, 코드가 조잡해지기만 하고 별다른 진전이 없었다. 그래서 구글링을 해봤는데 이런 풀이를 발견했다.
#include<cstdio>
int n;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n + i; j++) printf(i == n - 1 || j == n - 1 - i || j == n - 1 + i ? "*" : " ");
puts("");
}
return 0;
}
//출처:https://codersbrunch.blogspot.kr/2016/12/10992-17.html#comment-form
나는 쉬운 방향으로 풀이 방법을 바꾸자고 생각했던 것이 "먼저 *을 하나 출력하고 그 다음 줄부터 2(n-3)+1개의 공백을 사이에 두고 별 두개를 찍은 후, 마지막에 (라인 수*2)-1개의 별을 출력한다"였는데, 아무리 생각해도 우아하지 못한 풀이 방법이라 가슴 한구석이 답답했었다. 그런데 저 코드를 보고 나니 그 답답함이 시원하게 해소되었다. 코드도 간결하고, 로직도 깔끔하다. 정말 멋진 풀이가 아닐 수 없다. 오늘도 이렇게 한 수 배워간다.