https://www.acmicpc.net/problem/2446
2446번: 별 찍기 - 9
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
- 문제
- 예제와 같이 모래시계 모양으로 출력하면 됩니다. 사실 #2445번에서 *하고 공백만 뒤바뀐 거라 2445번을 푸셨으면 굉장히 쉬운 문제입니다. 그래서 이번 문제는 2445번에서 풀었던 방법이 아닌 다른 방법으로 풀겠습니다.
- 풀이
- n은 문제에 있는 입력 N을 의미하고 space는 추후에 출력할 공백의 개수를 의미합니다.
- n을 입력하면 총 층수의 개수는 2n - 1개입니다. #2445번에서는 2n -1 개의 층을 두 파트로 나누어 풀었지만 이번에는 하나의 반복문으로 풀 예정입니다.
- 위 예제에서 공백 패턴을 보시면 맨 윗층부터 차례대로 0, 1, 2, 3, ... , n -1개 까지 증가했다가 n -1부터 다시 하나씩 감소하여 맨 아래층에는 0개가 출력되어야 합니다. n은 2n - 1 층 중 가운데에 해당되는 층이므로 i는 현재 층의 위치이니 n > i 일 때 space의 값을 1씩 증가하고 그 외의 경우는 (즉, n <= i) space의 크기를 1씩 감소시킵니다.
- Line 20은 space의 크기 만큼 공백을 출력하는 반복문입니다.
- 위 예제에서 별 패턴을 보시면 (공백은 이미 위에서 알아서 출력이 되게 했으므로 공백을 고려할 필요는 없습니다) 맨 위층에서 2n -1개의 별을 출력하는 것을 시작으로 2개씩 줄어들어 1개까지 출력되고 다시 2개씩 증가하며 최종적으로 다시 2n - 1개의 별을 출력합니다.
- Line 26은 n > i일 경우인 즉 윗 부분을 출력하는 반복문입니다. 2n -1을 시작으로 별의 개수가 두 개씩 줄어들어야 하니 j는 1부터 2n - 2i까지 출력하게 하면 됩니다. ( Line 10에서 i는 0부터 1씩 증가하는 걸 생각하시면 됩니다. )
- Line 33은 n > i의 경우가 아닌 그 외의 경우 별의 개수는 차례대로 3, 5, 7, 9, ... , 2n - 1개가 출력되어야 합니다. for문 안에 있는 조건문이 꽤 복잡해 보이는데 처음은 별 3개가 출력되어야 하니 h는 1부터 2개랑 같을 때까지 즉 h = 1; h <= 2; 라 표현할 수 있습니다. 하지만 이러면 별은 계속 3개만 출력되겠죠? 그러니 h <= a + 2라고 표현을 하여 a가 2, 4, 6개씩 늘어나게 이미 위에서 선언한 변수 i와 n을 이용하여 만들어야 합니다. n은 이미 우리가 입력한 상수값이고 i는 계속 1씩 늘어나니 a = 2(i - n)이라 표현할 수 있습니다. ( 33번 Line이 처음으로 돌아갈때는 n = i인 상태임을 알면 이해하기 수월할 것입니다) 그러므로 h <= 2(i -n) + 2를 정리하면 h < = 2(i - n + 1)이라는 조건이 도출됩니다.
- 사실 변수를 따로 하나 선언해서 조건을 짜는게 더 쉽고 효율적일 수도 있지만 변수 늘리기 싫어서 이리 복잡하게 했습니다
본 게시물은 제가 공부한 내용을 올린 글이라 내용이 틀리거나 오류가 있을 수도 있습니다. 만약 그럴 시 jaewonahn1234@gmail.com으로 피드백해주시면 감사하겠습니다.
'SW > 백준' 카테고리의 다른 글
[백준] 10991번: 별 찍기 - 16 (C) (0) | 2021.12.30 |
---|---|
[백준] 2522번: 별찍기 - 12 (C) (0) | 2021.12.26 |
[백준] 2445번: 별 찍기 - 8 (C) (0) | 2021.12.25 |
[백준] 2442번: 별 찍기 - 5 (C) (0) | 2021.12.23 |
[백준] 2441번: 별 찍기 - 4 (C) (0) | 2021.12.23 |