반응형

별 찍기 5

[C] 백준알고리즘 #2445 별 찍기 - 8 (리본)

리본모양의 별을 찍어내는 문제이다. 예제출력 1의 빈칸을 보면 모래시계 모양이니 앞에서 만들었던 모래시계 코드를 가져와서 조금 수정해보도록 한다. 위는 모래시계 모양으로 별을 찍어내는 코드이다. 여기서 printf(" "); 과 printf("*"); 의 위치를 바꾸게 된다면 별@@@@@ 별별@@@ 별별별@ 별별@@@ 별@@@@@ 처럼 나오게 될 것이다. @는 빈칸을 의미한다. 그렇다면 여기에서 리본의 오른쪽 삼각형에 해당하는 부분만 더 추가해준다면 쉽게 해결할 수 있을 것이다. 오른쪽 리본에 찍히는 별의 갯수는 왼쪽 리본과 같고, 증감도 똑같으므로 각 for문을 복사해서 빈칸을 입력하는 for문 뒤에 붙여넣기 해주면 된다. 붙여넣은 다음 빈칸의 개수를 예제 출력 1과 같이 조정해주기 위해 빈칸을 입력하..

[C] 백준알고리즘 #2444 #2446 별 찍기 - 7, 9 (다이아몬드, 모래시계)

앞선 별 찍기 5와 6을 합한 문제이다. 단순히 합쳐버리게 되면 * *** ***** ***** *** * 처럼 가운데에 중복되는 줄이 생성될 수 있으므로 조건을 조금 수정해준다. 4와 6의 정답을 가져와서 이어붙였다. 다만 위와같은 문제가 생기므로 두번째 for문(별 역순으로 찍는 구문)을 조금 수정 했다. 먼저 줄을 나타내는 i의 조건식에서 i = i * 2 + 1로 변경했는데 이로인해 조건의 범위가 2만큼 줄어들게 된다. 이는 별 갯수를 2n - 1개부터 출력하는 것이 아닌 2n - 3개부터 출력하기 위해서이다. 이어서 별 찍기 - 9 문제이다. 위의 문제의 상하를 뒤바꾼 문제이기 때문에 코드의 위치만 바꾸었다. 단순히 위치만 바꾸고 그대로 실행하면 다음처럼 오답이 나오므로 코드를 조금 수정해준다...

[C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리)

마치 트리모양의 별을 찍는 문제이다. 규칙을 찾아보면 빈칸은 N-1개부터 차례대로 줄어들고 *의 갯수는 1,3,5,7 ... 2n-1 개 만큼 늘어난다. 친절하게도 문제에서 N번째 줄에는 2*N-1개 라고 정의해주었으므로 이 식을 이용하여 코드를 짜면 된다. for문안의 첫번째 for문은 빈칸을 만드는 것. 그리고 두번째 for문은 *을 찍는 것이다. 위와 같은 문제이지만 역순으로 찍는 문제이다. 조건을 정하기가 꽤 까다로워 보이지만 규칙을 찾아보면 1번째 줄에서 2n -1 개 2번째 줄에서 2n - 3개 .. n번째줄에서 2n - (2n -1) 개 가 되어 1개가 출력되는 것을 알 수 있다. 따라서 초기값을 n*2-1부터 줄을 나타내는 i*2-1까지 감소하면서 *을 찍어주면 된다.

[C] 백준알고리즘 #2439 #2441 별 찍기 - 2, 4

똑같은 별 찍기 문제이지만 별이 오른쪽정렬한 상태로 출력이 된다. 이를 위해선 별이 찍히기 전까지는 빈칸을 출력해주어야 한다. 위와같은 문제는 빈칸부분과 별 부분을 나누어 생각해주면 편하다. 결국에는 n x n 만큼을 출력해주는 부분이므로 M을 입력했을 때 n 줄에 M-n만큼은 빈칸을, n만큼은 별을 출력해주면 된다. for문 안에 for문을 2개 만들어서 코드를 짜보았다. for문 안의 첫번째 for문은 빈칸을, 두번째 for문은 *을 출력하는 코드이다. 5를 입력받은 경우 첫번째 for문에서는 i = 1, j = 5,4,3,2,1 이 되는데 조건을 만족하는 j는 5,4,3,2 로 4개이므로 4칸의 빈칸이 생긴 후 두번째 for문으로 넘어가서 *이 한개 찍힌다. 한바퀴를 돌고 나면 i = 2 , j =..

[C] 백준알고리즘 #2438 #2440 별 찍기 - 1 , 3

for문 연습하는데 가장 많이 나오는 별 찍기 문제이다. 위 문제는 그 중에서도 가장 기본이 되는 순차적으로 1,2,3,...,n개의 별을 찍는 문제이므로 크게 어려움은 없을 것이다. i 와 j는 각각 줄, 칸을 의미한다고 보면 된다. 위 문제에서는 n번째 줄에서는 n개의 별만 찍어야 한다. 1번째 줄에서는 i = 1, j = 1,2,3,4,5 이므로 i

반응형